OnTouchEvent 检测点击在我的华硕 Zenfone 上不起作用
OnTouchEvent detect click not working on my Asus Zenfone
我使用 onTouchEvent 方法来实现拖放事件和点击事件。我在我的 Nexus 7 (2012) 上测试了结果,它工作得非常好,但在我的智能手机 Asus Zenfone 上,它不是,我不明白为什么,这是我的代码:
button.setOnTouchListener(new View.OnTouchListener() {
private float startX, startY;
private long startClickTime;
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
startClickTime = Calendar.getInstance().getTimeInMillis();
break;
case MotionEvent.ACTION_MOVE:
if (v instanceof Button) {
Button button = ((Button) v);
if (button.getText().length() == 0) return true;
ClipData clipData = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new DragShadowBuilder(v, false, scale);
v.startDrag(clipData, shadowBuilder, v, 0);
DataHolder.getInstance().setCurrentText(button.getText().toString());
button.setText("");
}
return true;
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (isAClick(startX, endX, startY, endY) && clickDuration < CLICK_DURATION) {
v.performClick();
}
return true;
}
return false;
}
});
有人看到我的点击没有被触发的原因了吗?
编辑:截图
这是我的建议 - 转到您的 phone 设置,有一个显示布局边界的选项,您可以将其设置为打开和关闭 - 当此选项打开时,您可以看到您点击的位置。
我对您的 phone 可能发生的事情不承担任何责任,但我总是这样解决这些问题
我终于成功地让我的代码工作了。如果检测到点击,我只是在 Action Move 中添加,如果没有,并且只有当没有点击时,我才开始拖动。就是这样。
我使用 onTouchEvent 方法来实现拖放事件和点击事件。我在我的 Nexus 7 (2012) 上测试了结果,它工作得非常好,但在我的智能手机 Asus Zenfone 上,它不是,我不明白为什么,这是我的代码:
button.setOnTouchListener(new View.OnTouchListener() {
private float startX, startY;
private long startClickTime;
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
startClickTime = Calendar.getInstance().getTimeInMillis();
break;
case MotionEvent.ACTION_MOVE:
if (v instanceof Button) {
Button button = ((Button) v);
if (button.getText().length() == 0) return true;
ClipData clipData = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new DragShadowBuilder(v, false, scale);
v.startDrag(clipData, shadowBuilder, v, 0);
DataHolder.getInstance().setCurrentText(button.getText().toString());
button.setText("");
}
return true;
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (isAClick(startX, endX, startY, endY) && clickDuration < CLICK_DURATION) {
v.performClick();
}
return true;
}
return false;
}
});
有人看到我的点击没有被触发的原因了吗?
编辑:截图
这是我的建议 - 转到您的 phone 设置,有一个显示布局边界的选项,您可以将其设置为打开和关闭 - 当此选项打开时,您可以看到您点击的位置。
我对您的 phone 可能发生的事情不承担任何责任,但我总是这样解决这些问题
我终于成功地让我的代码工作了。如果检测到点击,我只是在 Action Move 中添加,如果没有,并且只有当没有点击时,我才开始拖动。就是这样。