Разница между кликами и сенсорными прослушивателями в Android

У меня есть немного сомнения. Я использую кнопку изображения (например, значок воспроизведения в медиаплеере). Я хочу знать, какое действие прослушивать я должен использовать, onClickListener или onTouchListener. В чем разница между этими двумя действиями и когда я должен использовать их.

Solutions Collecting From Web of "Разница между кликами и сенсорными прослушивателями в Android"

  • onClickListener используется всякий раз, когда событие click для любого вида создается, например, например: click event для Button, ImageButton.

  • onTouchListener используется всякий раз, когда вы хотите реализовать функцию Touch типа, скажем, например, если вы хотите получить координаты экрана, где вы точно касаетесь.

Обновить:

Просто проверьте официальный документ для: onClickListener и onTouchListener .

Поэтому из официального документа определение для обоих:

  • OnClickListner : определение интерфейса для обратного вызова, вызываемого при нажатии на просмотр.
  • OnTouchListener : определение интерфейса для обратного вызова, вызываемого при отправке события касания к этому представлению. Обратный вызов будет вызван, прежде чем событие касания будет передано в представление.

Ответ @ vishy1618 имеет ключевое понимание этой темы (пытался оставить это как комментарий там, но слишком долго).

Концептуально, onClick – это всего лишь «обертка» вокруг определенной последовательности событий касания – вниз, без перетаскивания вверх. Поэтому сравнение onTouch и onClick – это просто низкоуровневый API (raw touch events) по сравнению с высокоуровневым API (логический пользовательский щелчок).

Но важная проблема совместимости : в Android, onClick также может быть запущен KEYBOARD (или трекболом или любым другим альтернативным входом / аппаратным устройством). Но (afaict) нет поддержки для срабатывания сенсорных событий через любое другое устройство ввода, кроме сенсорного экрана.

Итак, если вы кодируете свой пользовательский интерфейс только для сенсорных событий, вам неявно требуется сенсорный экран . Если вы придерживаетесь onClick, ваше приложение теоретически может работать на устройстве без касания.

Конечно, все «совместимые» Android телефонов в настоящее время имеют сенсорные экраны … так что это эффективно спорно. Но если вы хотите, чтобы ваше приложение работало на нетелефонном оборудовании, это, возможно, стоит рассмотреть.

Здесь есть хорошая дискуссия:

Как определить, имеет ли устройство Android сенсорный экран?

https://groups.google.com/forum/?fromgroups=#!topic/android-beginners/cjOVcn0sqLg

OnClickListener – это ряд событий, которые запускаются с клавиатуры или сенсорного экрана. Они выполняются по определенному виду, и весь вид принимает событие. Напротив, onTouchListener используется только для событий сенсорного экрана, и они не могут запускаться с клавиатуры или любых других входов. Они обычно также получают соответствующую информацию касания, такую ​​как x, y corrdinates и т. Д.

Я думаю, что onClickListener подходит для вашего приложения, если вы не используете более сложные входы, такие как жесты и т. Д.

Этот вопрос я также имел в виду, что следует использовать клик или сенсорный прослушиватель.

Тогда у меня есть такое понимание,

Когда мне нужен какой-либо View(Button/Image/etc) to make clickable это означает, что пользователь просто не прикасается к этой части экрана, но по-прежнему стараюсь коснуться этой части экрана, чтобы следующее действие use onClickListener вызванным. Я use onClickListener , а также другую вещь Похоже на работу с Button, мы можем сделать его Clickable True / False в соответствии с требованием динамически, поэтому в этих ситуациях рекомендуется использовать OnClickListener.

 new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub } }; 

При разработке экранов, where the simple Touch of User is to be taken as action в играх или Работа с изображениями, которые вы хотите захватить, когда пользователь коснулся, а также вам нужно to find the Motion Events up/down/left/righ Из Touch I preffer use onTouchListener .

 new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return false; } }; 

И в вашем случае я предлагаю использовать onClickListener