Как использовать View.OnTouchListener вместо onClick
Я разрабатываю приложение для Android 2.2.2 для клиента и он хочет сделать следующее:
Теперь у меня есть кнопка с событием onClick, но ему не нравится, он хочет dectect, когда пользователь отпустит кнопку.
Я нашел вид.OnTouchListener который я думаю, что это то, что мне нужно использовать, но есть ли возможность добавить это событие в xml, как я сделал с onClick?
<ImageButton
android:id="@+id/btnSaveNewGate"
android:layout_width="@dimen/btnSaveNewGate_width"
android:layout_height="@dimen/btnSaveNewGate_height"
android:layout_below="@+id/radioGrGateType"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onSaveNewGateClick"
android:scaleType="fitXY"
android:src="@drawable/save_gate_selector" />
у меня есть еще два вопроса:
что событие, связанное с тем, когда пользователь отпускает палец?
есть ли какие-либо рекомендации, которые запрещают использование View.OnTouchListener вместо onClick?
3 ответов
событие, когда пользователь отпускает палец -MotionEvent.ACTION_UP. Я не знаю, есть ли какие-либо рекомендации, которые запрещают использование View.OnTouchListener вместо onClick (), скорее всего, это зависит от ситуации.
вот пример кода:
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
// Do what you want
return true;
}
return false;
}
});
предположительно, если кто-то хочет использовать OnTouchListener, а не OnClickListener, то дополнительная функциональность это. Это дополнительный ответ, чтобы показать более подробную информацию о том, как OnTouchListener можно использовать.
определить слушателя
поместите это где-нибудь в своей деятельности или фрагменте.
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
установить слушателя
установите слушателя в onCreate (для деятельности) или onCreateView (для a Фрагмент.)
myView.setOnTouchListener(handleTouch);
Примечания
-
getXиgetYдайте вам координаты относительно вида (то есть левый верхний угол вида). Они будут отрицательными при движении выше или слева от вашего взгляда. ИспользоватьgetRawXиgetRawYесли вы хотите абсолютные экранные координаты. - вы можете использовать
xиyзначения для определения таких вещей, как направление салфетки.
OnClick запускается, когда пользователь отпускает кнопку. Но если вы все еще хотите использовать TouchListener, вам нужно добавить его в код. Это просто:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});