【发布时间】:2014-05-10 17:36:04
【问题描述】:
我有一个包含多个 ImageView 的 Activity,每个都有自己的 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:我在整个应用程序中使用带有 false android:windowEnableSplitTouch 的样式
<style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents">false</item>
</style>
【问题讨论】:
标签: android drag-and-drop block draggable drag