2

我用 10 布局创建 Scrollview。我想通过拖动来改变布局位置。

layout_view.setOnTouchListener(new View.OnTouchListener() { 

@Override

public boolean onTouch(View v, MotionEvent ev) {
final int action = ev.getAction();  

switch (action) {   
case MotionEvent.ACTION_DOWN: {
...

问题是当我向下/向上拖动时(当我向右/向左拖动时效果很好):

1) MotionEvent.ACTION_CANCEL 发生

2)滚动视图正在移动

1)如何在拖动布局时禁用 Scrollview 滚动?

2) 你知道如何在不获取 MotionEvent.ACTION_CANCEL 的情况下保持布局吗?

谢谢

4

1 回答 1

1

用一个可以启用/禁用的覆盖 ScrollView

//A scrollview which can be disabled during drag and drop
public static class OnOffScrollView extends ScrollView {
    private boolean on = true;
    public OnOffScrollView(Context context) {
        super(context);
    }

    public OnOffScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public OnOffScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    //turn on the scroll view
    public void enable() {
        on=true;
    }

    //turn off the scroll view
    public void disable() {
        on = false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (on) {
            return super.onInterceptTouchEvent(ev);
        }
        else {
            return false;
        }
    }
}

在您的情况下禁用它,在和情况下MotionEvent.ACTION_DOWN再次启用它MotionEvent.ACTION_CANCELMotionEvent.ACTION_UP

于 2010-11-15T04:36:36.313 回答