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)Scrollviewが動いています

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 に答える