it-swarm-ru.tech

onTouchevent () против onTouch ()

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

57
stelios

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

41
trojanfoe

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

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

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

1- внедрить OnTouchListener

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

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

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

2) Работа:

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

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

28
Dexter

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

5
Walking Code

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

@override onTouchEvent(MotionEvent e){}

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

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

onTouch является универсальным, а onTouchEvent - определенным для View. И вы также можете отфильтровать ваш взгляд, используя onTouch.

4
Xar E Ahmer

OnTouchEvent () фактически будет вызван Activity, если ни одно из представлений не использует событие touch. 

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

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

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

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

Это в Android 5.1 API 22.

0
Dave Hubbard

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

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

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

в то время как

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

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

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

0
gor