问题
I tried to implement android.gesture.GestureOverlayView in ScrollView. In my activity.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scrollViewreceipt"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/include1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/toolbar" />
<Spinner
android:id="@+id/custom_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"/>
<ListView
android:id="@+id/customList"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginTop="15dp" />
<android.gesture.GestureOverlayView
android:id="@+id/signaturePad"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_weight="5"
android:background="#d3d3d3"
android:eventsInterceptionEnabled="true"
android:fadeEnabled="false"
android:gestureColor="#333"
android:gestureStrokeLengthThreshold="0.1"
android:gestureStrokeType="multiple"
android:fadeOffset="5000"
android:orientation="vertical" >
</android.gesture.GestureOverlayView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="testImage"
android:text="test"/>
</LinearLayout>
But when i try to draw on my android.gesture.GestureOverlayView the view scroll and so it's inusable, and so i ask if how can i block a scroll when touch on android.gesture.GestureOverlayView.
回答1:
I solved in this way:
I extended a ScrollView with CustomScrollView
public class CustomScrollView extends ScrollView {
private boolean enableScrolling = true;
public boolean isEnableScrolling() {
return enableScrolling;
}
public void setEnableScrolling(boolean enableScrolling) {
this.enableScrolling = enableScrolling;
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollView(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isEnableScrolling()) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isEnableScrolling()) {
return super.onTouchEvent(ev);
} else {
return false;
}
}
}
In my XML I have change ScrollView with my new extended class with id
<com.itmind.spac.spacapp.custom_extends.CustomScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scrollViewreceipt"
>......</com.itmind.spac.spacapp.custom_extends.CustomScrollView>
And in my ActivityClass
public class CustomActivity implements GestureOverlayView.OnGestureListener {
CustomScrollView myScrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, R.layout.activity_receipts);
GestureOverlayView signaturePad = (GestureOverlayView) findViewById(R.id.signaturePad);
myScrollView = (CustomScrollView) findViewById(R.id.scrollViewreceipt);
assert myScrollView != null;
assert signaturePad != null;
signaturePad.addOnGestureListener(this);
}
@Override
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
myScrollView.setEnableScrolling(false);
}
@Override
public void onGesture(GestureOverlayView overlay, MotionEvent event) {
}
@Override
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
myScrollView.setEnableScrolling(true);
}
@Override
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
}
来源:https://stackoverflow.com/questions/38609102/block-scroll-in-scrollview-when-touch-on-android-gesture-gestureoverlayview