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
-~----------~----~----~----~------~----~------~--~---

Reply via email to