Подтвердить что ты не робот

OnTouchevent() vs onTouch()

После многих экспериментов с onTouchEvent и onTouch я обнаружил, что onTouch работает везде, где бы вы ни хотели (будь то в действии или в представлении), пока вы объявили интерфейс и правильно поставили Listener! С другой стороны, onTouchEvent работает только внутри представления! Правильно ли мое предположение? Это реальная разница?

4b9b3361

Ответ 1

Да, вы правы - onTouch() используется пользователями View для получения событий касания, а onTouchEvent() используется производными классами View, чтобы получить события касания.

Ответ 2

У меня была некоторая путаница, связанная с тем, как работают onTouchEvent() и onTouch() (вы можете увидеть мой комментарий к этому вопросу). После некоторых исследований ниже я узнал об этом. Это может быть полезно для новичков.

1) Реализация:

Если вы хотите использовать onTouch(), вам нужно сделать три вещи.

1- реализовать OnTouchListener

2- вызов setOnTouchListener() в представлении, которое вы хотите установить, чтобы уловить событие

3- переопределить onTouch() для обработки события

но если вы хотите использовать onTouchEvent(), вам не нужно делать шаги 1 и 2 выше. просто вам нужно переопределить onTouchEvent().

2) Работа:

onTouch() работает в режиме просмотра, просмотра, активности. Это означает, что вы можете использовать onTouch() внутри вида, viewgroup или активность. Эти методы принимают два аргумента [onTouch (View v, MotionEvent e)]. Это позволяет фильтровать события для разных представлений в группе действий или просмотра. Или сама деятельность может справиться с этим.   onTouchEvent() принимает один аргумент [onTouchEvent(MotionEvent e)]. Таким образом, это можно использовать только внутри представления, которое реализует его или на производном виде. Производный вид позволяет расширять поведение касания, определенное в onTouchEvent().

Я думаю, что такие опции являются частью более гибкой философии развития Android, хотя иногда это создает путаницу для учеников.

Ответ 3

Я использовал ontouch() и ontouchevent(), поскольку ontouch используется, когда я хочу работать с элементами единого вида, например кнопками, кнопками изображения и т.д. на одном изображении (скажем, Linringayout), тогда как когда я хочу работать над областями остальные элементы (например, кнопка) я использую ontouchevent.

Ответ 4

Фактически, onTouchEvent() будет вызван действием, если ни один из просмотров не примет событие касания.

И, как вы говорите, onTouch() может использоваться в любом классе, если:

  • Этот класс (т.е. Foo) реализует интерфейс OnTouchListener и
  • Этот класс является зарегистрированным слушателем, используя view.setOnTouchListener(foo);

Ответ 5

При создании пользовательского представления вы можете

@override onTouchEvent(MotionEvent e){}

, тогда как вы можете добавить onTouch в любой View, ViewGroup или Activity.

onTouch(View v, MotionEvent e) { //you can filter any View touch }

onTouch является общим, а onTouchEvent - для просмотра. И вы также можете отфильтровать свое представление с помощью onTouch.

Ответ 6

Я нашел другое различие. onTouchEvent, похоже, не получает устаревшие события MotionEvent.ACTION_POINTER_2_DOWN и MotionEvent.ACTION_POINTER_2_UP.

Конечно, они довольно старые, и мы не должны их использовать.

Это в Android 5.1 api 22.

Ответ 7

onTouchEvent - это метод, реализованный View, Activity и другими базовыми классами, такими как LinearLayout, и т.д...

public boolean onTouchEvent(MotionEvent event) {
    throw new RuntimeException("Stub!");
}

вы можете переопределить этот метод любыми производными классами

тогда

onTouch() определяется интерфейсом OnTouchListener {}

public interface OnTouchListener { boolean onTouch(View var1, MotionEvent var2); }

поэтому вам нужно только реализовать его при установке этого интерфейса в класс