Как использовать 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;
});