Intereting Posts
Переопределить onDraw () или draw ()? Android: обновление галереи после сохранения новых изображений Android: Как получить строку из ресурсов, используя ее имя? Как добавить contentDesctiption в InfoWindow или маркер в Android GoogleMaps V2 для TalkBack Намерение со старым дополнительным в onCreate () для singleTask Activity Google Play Services требуется, но Google Play (рынок) не установлен .. что делать? Получить угол устройства с помощью функции getOrientation () Как поворачивать изображение сбоку или вверх дном? Как переопределить поведение кнопок громкости в приложении Android? Переполнение панели действий не отображается Проблема при использовании отпечатка пальца Android: IV требуется при расшифровке. Используйте IvParameterSpec или AlgorithmParameters для его предоставления. Android – Неизвестный стиль атрибута на теге фрагмента Андроид, использующий Renderscript для размытия эффектов, вызывает A / libc: фатальный сигнал 7 (SIGBUS), код 2, ошибка addr 0x9e6fa000 in tid 482 (AsyncTask # 1) Facebook SDK 4 для Android – как выйти из программы Перетащите и передвиньте круг, нарисованный на холсте.

Как использовать View.OnTouchListener вместо onClick

Я разрабатываю приложение для Android 2.2.2 для клиента, и он хочет сделать следующее:

Теперь у меня есть кнопка с событием onClick, но он не нравится, он хочет отреагировать, когда пользователь отпустит кнопку.

Я нашел View.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 вместо View.OnTouchListener ?

Solutions Collecting From Web of "Как использовать View.OnTouchListener вместо onClick"

Событие, когда пользователь выпускает свой палец, – 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; } }); 

OnClick запускается, когда пользователь отпускает кнопку. Но если вы все еще хотите использовать TouchListener, вам нужно добавить его в код. Это просто:

 myView.setOnTouchListener(new View.OnTouchListener() { // Implementation; }); 

Предположительно, если вы хотите использовать OnTouchListener а не OnClickListener , тогда необходимы дополнительные функции OnTouchListener . Это дополнительный ответ, чтобы показать более подробную информацию о том, как использовать 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 (для Activity) или onCreateView (для фрагмента).

 myView.setOnTouchListener(handleTouch); 

Заметки

  • getX и getY дают вам координаты относительно вида (то есть левый верхний угол представления). Они будут отрицательными при перемещении вверх или слева от вашего вида. Используйте getRawX и getRawY если вам нужны абсолютные координаты экрана.
  • Вы можете использовать значения x и y для определения таких вещей, как направление движения.