You could still try the approach I described by getting rawX and rawY from the motion event and match it with the global rect position of the target view. Motion event coordinates are usually in a local coordinate system. I guess the local coordinate system is the one of the ImageView you start your gesture with, hence the too big numbers when you get your ACTION_CANCEL on the other view.
On Saturday, August 24, 2013 5:19:04 AM UTC-5, OronS wrote: > > 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<http://developer.android.com/guide/topics/ui/drag-drop.html>(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)<http://developer.android.com/reference/android/view/ViewGroup.html#dispatchTouchEvent%28android.view.MotionEvent%29>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)<http://developer.android.com/reference/android/view/View.html#getGlobalVisibleRect(android.graphics.Rect,%20android.graphics.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 [image: :)] >>>> >>>> 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 [email protected] To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

