Saturday, August 24, 2013

[android-developers] Re: Detect a gesture startet from the outside of a view

Little search showed that ACTION_CANCEL is the right value to get from the system, but the (X,Y) values on this event are not proportional to the gesture I made :S
Y values are way bigger than expected
I did expand the HitRect size, but it's still too big

On Friday, August 23, 2013 10:24:03 PM UTC+3, OronS wrote:
Hi :)
Thanks for your post

I'm trying to implement specific gesture between images...no drag & drop
The images are inside GestureOverlayView (because of prediction = gestureLibrary.recognize()...I don't know how to recognize a gestures which have curls or shapes), and I thought the parent intercepts touch event automatically (by automatically I mean set the OnTouch listener to the parent).
Don't you think inheritance is wrongly used in this case??

Anyway..I used gestureOverlayView.setOnTouchListener to intercept touch events on children, and gestureOverlayView.addOnGesturePerformedListener to check whether the gesture was recognized, and user's finger passed through both images.

The problem now is that in gestureOverlayView.setOnTouchListener, instead of ACTION_UP, I get ACTION_CANCEL :S

I don't know if it should be like that

On Friday, August 23, 2013 6:17:23 PM UTC+3, Nobu Games wrote:
Is it just gestures or are you trying to implement drag and drop (because it sounds like that). Either way you could just intercept motion events in the parent view group that contains your images and let it handle your gesture recognition.

So let's say you create a derivative class "L" of your layout that contains the image views.

You could override dispatchTouchEvent(MotionEvent) of L and check for the following motion event states:

1. Gesture started (ACTION_DOWN)
Iterate your list of ImageView children of L and see if the touch event point is in one of them. If yes, your gesture starts.

The View class has the method getGlobalVisibleRect(Rect, Point) which can be used for checking if your touch event coordinate hits one of your image views. It would roughly look like the following (not tested since I'm not sure if these methods return locations in screen or window coordinate system, you may need to debug it):

Rect r = new Rect(); // should be class member you can reuse
float x = motionEvent.getRawX();
float y = motionEvent.getRawY();

for(ImageView iv : imageViews) {
    iv.getGlobalVisibleRect(r);

    if(r.contains(x, y)) {
        // Touch event is inside image view
    }
}

2. Gesture ongoing (ACTION_MOVE)
If you visualize your gesture by drawing some trail or moving around the first touched image view then this is the right point to do so. Here you can update your view(s).

3. Gesture finished (ACTION_UP)
Here you need to iterate your ImageView children again in order to see if the finger has been lifted over another image view. In that case your gesture was successful.

4. Gesture canceled (ACTION_CANCEL)
Whatever your gesture is doing should be canceled here.


On Friday, August 23, 2013 1:21:59 AM UTC-5, OronS wrote:
Hi there :)

I have two ImageViews in my app.
I've added a gesture detector (GestureOverlayView), and added gestures to the app by using android's sample, which record gestures and save them to a file, and I then load this file.

My Goal is to limit the gestures area.. I want them to start from one ImageView, and end on the other.
I didn't find anything on google!! : /

I've added OnTouch listener to both images, but I don't know how to detect a gesture coming from the outside of a View.

I can detect a gesture starts from one Image ("Down" event), but when my finger goes over the second and then go up, the event triggered is "Cancel" on the first image

Please Help

Thanks,
Oron

--
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
---
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment