我有一个包含多个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>
答案 0 :(得分:0)
你可以简单地回来;如果一个标志是真的。即,在触发任何侦听器时设置标志。你没想过吗?