0
我有一個片段中的圖像,我想在片段中左右移動。我想做更多,但我簡化了我的代碼以顯示我的問題。這是我的代碼:拖放 - 爲什麼我會得到多個ACTION_DRAG_LOCATION事件?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_main, container, false);
View imageLayout = v.findViewById(R.id.img1);
imageLayout.setOnDragListener(new ImageDragEventListener());
imageLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder dragShadowBuilder = new View.DragShadowBuilder();
v.startDrag(data, dragShadowBuilder, null, 0);
return true;
}
});
return v;
}
private class ImageDragEventListener implements View.OnDragListener {
int originLeft = 0;
float originX = 0;
@Override
public boolean onDrag(View v, DragEvent event) {
final int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
originLeft = v.getLeft();
originX = event.getX();
return true;
case DragEvent.ACTION_DRAG_ENTERED:
return true;
case DragEvent.ACTION_DRAG_LOCATION:
float currentX = event.getX();
Log.i(TAG, "currentX= " + currentX);
int deltaLeft = (int) (currentX - originX);
v.setLeft(originLeft + deltaLeft);
return true;
case DragEvent.ACTION_DRAG_EXITED:
return true;
case DragEvent.ACTION_DROP:
return true;
case DragEvent.ACTION_DRAG_ENDED:
return true;
default:
break;
}
return false;
}
}
這是我的輸出:
01-21 18:04:52.291 8486-8486/com.testdnd I/Fragment﹕ currentX= 971.14844
01-21 18:04:52.291 8486-8486/com.testdnd I/Fragment﹕ currentX= 671.39844
01-21 18:04:52.311 8486-8486/com.testdnd I/Fragment﹕ currentX= 982.2969
01-21 18:04:52.321 8486-8486/com.testdnd I/Fragment﹕ currentX= 692.3906
01-21 18:04:52.341 8486-8486/com.testdnd I/Fragment﹕ currentX= 993.28906
01-21 18:04:52.361 8486-8486/com.testdnd I/Fragment﹕ currentX= 714.4375
01-21 18:04:52.371 8486-8486/com.testdnd I/Fragment﹕ currentX= 1005.3906
01-21 18:04:52.391 8486-8486/com.testdnd I/Fragment﹕ currentX= 738.2969
01-21 18:04:52.411 8486-8486/com.testdnd I/Fragment﹕ currentX= 1016.1953
01-21 18:04:52.421 8486-8486/com.testdnd I/Fragment﹕ currentX= 760.34375
01-21 18:04:52.441 8486-8486/com.testdnd I/Fragment﹕ currentX= 1037.4375
01-21 18:04:52.461 8486-8486/com.testdnd I/Fragment﹕ currentX= 770.28125
01-21 18:04:52.471 8486-8486/com.testdnd I/Fragment﹕ currentX= 1057.3203
01-21 18:04:52.491 8486-8486/com.testdnd I/Fragment﹕ currentX= 780.16406
我得到每個手指運動兩個事件,並因此當我移動它的圖像閃爍。
爲什麼會發生這種情況,我該如何預防它?