Sunday, September 18, 2011

Re: [android-developers] Re: onTouchEvent not called on every touch motion

You don't need the history to do smooth tracking.  The history gives you all of the points between this in the last motion event...  but when tracking you always want to show your object at the most recent reported position, so the history is irrelevant.

The problem with the code is that it is trying to draw in to mCanvas directly.  The view hierarchy is update-based; you need to update the state and then invalidate the view drawing it to show the new state.  Even if you could draw to the Canvas outside of an update, the code here would be broken because it would just leave a trail of bitmaps drawn at various positions without erasing the previous one.  (Though I guess it is doing an invalidate() after drawing the bitmap, so you'd end up with the bitmap being briefly drawn and then erased as the invalidate is executed.)

Anyway, just store the new position of the bitmap, call invalidate(), and then in your onDraw() draw the bitmap at the current position.

On Sun, Sep 18, 2011 at 7:20 AM, blake <blake.meike@gmail.com> wrote:
If you look at the sample code in the Google documents you'll see that
motion events have history.  You'll need to use it to get a smooth
trace
-Blake
Programming Android, FTW

On Sep 18, 5:20 am, "loril...@gmail.com" <loril...@gmail.com> wrote:
> I want to let a user smoothly draw elements with his finger and avoid
> any lags as follows:
>
> public boolean onTouchEvent(MotionEvent event) {
>                         float x = event.getX();
>                         float y = event.getY();
>
>                         switch (event.getAction()) {
>                         case MotionEvent.ACTION_DOWN:
>                                 mCanvas.drawBitmap(primitive, x, y, mPaint);
>
>                                 invalidate();
>                                 break;
>                         case MotionEvent.ACTION_MOVE:
>                                 mCanvas.drawBitmap(primitive, x, y, mPaint);
>
>                                 invalidate();
>                                 break;
>                         case MotionEvent.ACTION_UP:
>                                 mCanvas.drawBitmap(primitive, x, y, mPaint);
>
>                                 invalidate();
>                                 break;
>                         }
>                         return true;
>                 }
>         }
>
> Using android SDK I find onTouchEvent is not called for every motion
> event. This results in drawing of a bitmap only at the points when the
> motion event is detected.
>
> I can do this very easily using iPhone SDK . Can anyone confirm if
> this is a limitation in Android or if there is a way we can increase
> the rate of motion events?

--
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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en



--
Dianne Hackborn
Android framework engineer
hackbod@android.com

Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails.  All such questions should be posted on public forums, where I and others can see and answer them.

--
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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment