From 533f6d187c8582114cfc601dc36cbd641229a5dc Mon Sep 17 00:00:00 2001 From: Allen Yeung Date: Tue, 24 Jul 2012 18:38:57 -0700 Subject: [PATCH] TIMOB-9955: Android: ScrollView with a wrap view becomes unscrollable on android Ti 2.1 --- .../titanium/ui/widget/TiUIScrollView.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java index a8a5d89598d..ee9e9319bc0 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/TiUIScrollView.java @@ -22,6 +22,8 @@ import android.content.Context; import android.graphics.Canvas; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -47,10 +49,20 @@ private class TiScrollViewLayout extends TiCompositeLayout private int parentWidth = 0; private int parentHeight = 0; private boolean canCancelEvents = true; + private GestureDetector gestureDetector; public TiScrollViewLayout(Context context, LayoutArrangement arrangement) { super(context, arrangement, proxy); + gestureDetector = new GestureDetector(new SimpleOnGestureListener() + { + @Override + public void onLongPress(MotionEvent e) + { + // Only do this for long presses to match iOS behavior + requestDisallowInterceptTouchEvent(true); + } + }); } public void setParentWidth(int width) @@ -72,11 +84,10 @@ public void setCanCancelEvents(boolean value) public boolean dispatchTouchEvent(MotionEvent ev) { // If canCancelEvents is false, then we want to prevent the scroll view from canceling the touch - // events of the child view + // events of the child view by calling requestDisallowInterceptTouchEvent(true) if (!canCancelEvents) { - requestDisallowInterceptTouchEvent(true); + gestureDetector.onTouchEvent(ev); } - return super.dispatchTouchEvent(ev); }