如何阻止一次拖动多个项目

时间:2014-05-10 17:36:04

标签: android drag-and-drop block draggable drag

我有一个包含多个ImageView的Activity,每个ImageView都有自己的OnDragListener和OnTouchListener。当我用两根手指同时点击显示屏时,我同时点击了2张图片,应用程序有时会崩溃。

如果实际拖动了一个项目,我怎么能阻止另一个拖动和触摸显示?我试图将setClicable(false)放到整个布局中,但它没有用。

class MyDragListener implements OnDragListener {
        RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.game_layout);

        @Override
        public boolean onDrag(View dropView, DragEvent event) {
            switch (event.getAction()) {
                case DragEvent.ACTION_DRAG_STARTED:
                    mainLayout.setClickable(false);
                    return true;

                case DragEvent.ACTION_DRAG_ENTERED:
                    // some code
                    return true;

                case DragEvent.ACTION_DROP:
                    // some code
                    return false;

                case DragEvent.ACTION_DRAG_ENDED:
                    mainLayout.setClickable(true);
                    // some code
                    return true;

                default:
                    break;
            }

            return true;
        }
}

编辑:我想到了一个想法 - 当点击某个项目时,从其他所有图片中删除OnTouchListeners。但是每次触摸都会增加CPU的负担。难道没有更好的方法吗? - >>还没工作

EDIT2: ACTION_DOWN - > inAction = true;它仍然无效。当我将图像拖到另一个上并进行第二次,第三次......触摸时,a)放下一张图片或者更糟糕的是b)NullPointerException

private final class MyTouchListener implements OnTouchListener {
        public boolean onTouch(View view, MotionEvent motionEvent) {
            Log.d(TAG, "" + inAction);
            if(motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                if(!inAction) {
                    inAction = true;
                    ClipData data = ClipData.newPlainText("", "");
                    DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
                    view.startDrag(data, shadowBuilder, view, 0);
                    view.setVisibility(View.INVISIBLE);
                    return true;
                }
                else
                    return true;
            }
            else if(motionEvent.getAction() == MotionEvent.ACTION_UP) {
                inAction = false;
                return true;
            }
            else {
                return false;
            }
        }

EDIT3:我在整个应用程序中使用带有错误android:windowEnableSplitTouch的样式

<style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:windowEnableSplitTouch">false</item>
    <item name="android:splitMotionEvents">false</item>
</style>

1 个答案:

答案 0 :(得分:0)

你可以简单地回来;如果一个标志是真的。即,在触发任何侦听器时设置标志。你没想过吗?