Android、DragListener 与 Single Tap 或 OnClick/OnTouch 相结合
Android, DragListener combined with Single Tap or OnClick/OnTouch
我正在努力将 DragListener 与 imageView 中的 SingeTap 动作结合起来。它们单独工作很好,但是这两者应该如何组合?
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_UP:
Log.e("SINGLE TAP","?");
break;
case MotionEvent.ACTION_MOVE:
ClipData data = ClipData.newPlainText("TRYING", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
break;
default: break;
}
return false;
}
});
好像还是不行。如何实现?
ACTION_UP
将在拖动事件完成后以及点击事件完成后调用。因此,您应该有一个标志来检测是否发生了拖动事件。这是一个例子
imageView.setOnTouchListener(new OnTouchListener() {
private boolean isDrag = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_UP:
if (!isDrag) {
// action was a single tap
}
isDrag = false; // reset the flag
break;
case MotionEvent.ACTION_MOVE:
isDrag = true; // set the flag
ClipData data = ClipData.newPlainText("TRYING", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
break;
default: break;
}
return false;
}
});
我正在努力将 DragListener 与 imageView 中的 SingeTap 动作结合起来。它们单独工作很好,但是这两者应该如何组合?
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_UP:
Log.e("SINGLE TAP","?");
break;
case MotionEvent.ACTION_MOVE:
ClipData data = ClipData.newPlainText("TRYING", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
break;
default: break;
}
return false;
}
});
好像还是不行。如何实现?
ACTION_UP
将在拖动事件完成后以及点击事件完成后调用。因此,您应该有一个标志来检测是否发生了拖动事件。这是一个例子
imageView.setOnTouchListener(new OnTouchListener() {
private boolean isDrag = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_UP:
if (!isDrag) {
// action was a single tap
}
isDrag = false; // reset the flag
break;
case MotionEvent.ACTION_MOVE:
isDrag = true; // set the flag
ClipData data = ClipData.newPlainText("TRYING", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
break;
default: break;
}
return false;
}
});