0
我有一個活動與幾個ImageViews,每個都有自己的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;
它仍然無法正常工作。當我在另外一個拖動圖像並進行第二次,第三次......觸摸,它)下降的圖片或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>
不幸的是,沒有工作。當我拿着一張圖片並用其他手指點擊別處時,操作系統仍會捕捉到該觸摸並干擾,就像我將拖動的圖片拖放到該地方一樣。 –
你是否沉默ACTION_POINTER_DOWN和UP? http://developer.android.com/training/gestures/multi.html – Messer
檢查我的EDIT2。原來我已經處理好了。 –