onTouchevent() vs onTouch() onTouchevent() vs onTouch() android android

onTouchevent() vs onTouch()


Yes you are correct - onTouch() is used by users of the View to get touch events while onTouchEvent() is used by derived classes of the View to get touch events.


I had some confusion related to how onTouchEvent() and onTouch() work (You can see my comment to this question). After some research below is what I have found on it. This may be helpful to beginners.

1) Implementation:

If you want use onTouch() you have to do three things.

1- implement OnTouchListener

2- call setOnTouchListener() on the view you want to set catch the event

3- override onTouch() to handle the event

but if you want to use onTouchEvent() you don't need to do step 1 & 2 above. just you need to override onTouchEvent().

2) Working:

onTouch() works on view, viewgroup, activity. Meaning you can use onTouch() inside view, viewgroup or activity. This methods take two arguments [onTouch(View v, MotionEvent e) ]. This allows you filter events for different views in an activity or view group. Or the activity can itself handle it. onTouchEvent() takes on one argument [onTouchEvent(MotionEvent e) ]. Thus this can be used only inside the view that implements it or on the derived view. A derived View enables extension of the touch behavior defined in onTouchEvent().

I think, such options are part of Android's more flexible development philosophy, though it creates confusion for the learners at times.


I have used ontouch() and ontouchevent(), as ontouch is used when i want to work on elements of single view, like buttons , imagebuttons etc on single view (say Linearlayout ), whereas when i want to work on areas rest of the my elements(e.g button) i use ontouchevent.