Override you dispatchTouchEvent(...), as you do right now, and forward its MotionEvent to a GestureDetector you created.
public class MyView ....{ GestureDetector mGD = new GestureDetector(this); public MyView(...) { ... ... mGD.setIsLongPressEnabled(true); ... } public boolean dispatchTouchEvent(MotionEvent event) { ... you may want to handle the MotionEvent.ACTION_UP yourself first. ... ... but always call this at the end: return mGD.onTouchEvent(event); } // Called by the GestureDetector mGD. public void onLongPress(MotionEvent event) { // do your stuff here. } } On Mar 30, 9:51 pm, Oceanedge <newsforhar...@gmail.com> wrote: > Thank you very much! > > But my current usecase is not to detect motion, but hold. I have a > PhotoView which display an icon. It needs to respond to click and hold > event. > If user click on it, it will scroll other widget content in one step. > If user touch & hold on it, it will scroll the widget content one by > one continually in about 800ms interval. > > Currently I implement the behavior by setOnClickListener() method for > the click event. > For touch & hold, I override dispatchTouchEvent() method and check for > the holding status by checking the move shall be less than 10 pixels > and event.getEventTime() - event.getDownTime() > 800ms for > MotionEvent.ACTION_MOVE event. > > It works fine in G1 but not work in emulator. > Is there any better solution? > Thanks! > > On Mar 30, 11:17 am, Romain Guy <romain...@google.com> wrote: > > > > > They work the same. > > > > I have a class inherited from RelativeLayout and override public > > > booleandispatchTouchEvent(MotionEvent event) method. After I touch & > > > hold on the touch screen, in emulator I got MotionEvent.ACTION_DOWN > > > event only. But in G1, I got MotionEvent.ACTION_DOWN first and then > > > MotionEvent.ACTION_MOVE continuously, even if I try my best to hold > > > still my finger tip. > > > That's simply because you cannot hold your finger still. With a mouse > > cursor you have a 1px precision, with a finger, it's a lot more. The > > way to "work around" this is simply to use thresholds when you try to > > detect motion. For instance in a ScrollView or ListView a scroll > > happens only if the finger has moved by 16 pixels or more. You can use > > the same values as the framework by looking at the ViewConfiguration > > class. > > > -- > > Romain Guy > > Android framework engineer > > romain...@android.com > > > Note: please don't send private questions to me, as I don't have time > > to provide private support. All such questions should be posted on > > public forums, where I and others can see and answer them- Hide quoted text > > - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---