From 5e681a0fc01c67017faa87264ab6e8218fa226af Mon Sep 17 00:00:00 2001 From: Manol Donev Date: Fri, 30 Nov 2018 17:14:49 +0200 Subject: [PATCH] feat(android-scrollview): add isScrollEnabled property (#150) --- .../widgets/HorizontalScrollView.java | 31 ++++++++++++++++++- .../widgets/VerticalScrollView.java | 29 +++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java b/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java index 2fb668c45..c63489719 100644 --- a/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java +++ b/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java @@ -8,6 +8,7 @@ import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -26,6 +27,7 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView { private int scrollableLength = 0; private SavedState mSavedState; private boolean isFirstLayout = true; + private boolean scrollEnabled = true; /** * True when the layout has changed but the traversal has not come through yet. @@ -47,7 +49,34 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView { public int getScrollableLength() { return this.scrollableLength; } - + + public boolean getScrollEnabled() { + return this.scrollEnabled; + } + + public void setScrollEnabled(boolean value) { + this.scrollEnabled = value; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // Do nothing with intercepted touch events if we are not scrollable + if (!this.scrollEnabled) { + return false; + } + + return super.onInterceptTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) { + return false; + } + + return super.onTouchEvent(ev); + } + @Override public void requestLayout() { this.mIsLayoutDirty = true; diff --git a/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java b/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java index 89cd34df7..db109467c 100644 --- a/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java +++ b/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java @@ -8,6 +8,7 @@ import android.content.Context; import android.graphics.Rect; import android.os.Parcelable; import android.util.AttributeSet; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -26,6 +27,7 @@ public class VerticalScrollView extends ScrollView { private int scrollableLength = 0; private SavedState mSavedState; private boolean isFirstLayout = true; + private boolean scrollEnabled = true; /** * True when the layout has changed but the traversal has not come through yet. @@ -48,6 +50,33 @@ public class VerticalScrollView extends ScrollView { return this.scrollableLength; } + public boolean getScrollEnabled() { + return this.scrollEnabled; + } + + public void setScrollEnabled(boolean value) { + this.scrollEnabled = value; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // Do nothing with intercepted touch events if we are not scrollable + if (!this.scrollEnabled) { + return false; + } + + return super.onInterceptTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) { + return false; + } + + return super.onTouchEvent(ev); + } + @Override public void requestLayout() { this.mIsLayoutDirty = true;