我有一些 ImageButtons 我想同时使用,我已经像这样实现了 onTouch
addAppointment.setOnTouchListener(new MyTouchListener());
我得到了这个:
private final class MyTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
vID = view;
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
return true;
} else {
return false;
}
}
}
<小时/>
class MyDragListener implements View.OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
eventLocation = (int) event.getX();
break;
case DragEvent.ACTION_DRAG_ENDED:
if (event.getResult() == true) {
addTreatment(vID, eventLocation);
System.out.println(vID);
}else{
addTreatment(vID, 0);
}
default:
break;
}
return true;
}
}
这工作完美无缺!但我还想添加 OnClickListener,因为如果您只需单击按钮,它应该执行不同的操作。 但是当我设置点击监听器时,它根本不起作用,它根本不会触发点击。
最佳答案
如果你从onTouch返回true,你就告诉android你处理了这个 Action ,它不需要再在你之后做任何事情。
如果您希望 Android 进一步处理该操作,其中还涉及将其传递给 onClick 处理程序,则必须在处理后从 onTouch 返回 false。
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
vID = view;
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
return false; // here
} else {
return false;
}
}
另请参阅What is meaning of boolean value returned from an event-handling method in Android其中对此进行了更详细的解释。
关于java - 在 1 个 ImageButton 上同时使用 OnTouchListener 和 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542210/