【发布时间】:2015-09-11 14:51:51
【问题描述】:
所以我认为我有一个非常简单的问题,但我似乎无法弄清楚。
我有一个 ImageView,我正在使用它的 setOnTouchListener 方法 (OnTouch)。
如何区分ACTION_DOWN 事件和ACTION_MOVE 事件?
即使我只是单击(触摸)ImageView,ACTION_MOVE 事件也会被调用。
我的目标是当用户点击它时打开某物(做任何事情),当用户握住它并移动它时移动它。
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = params.x;
initialY = params.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
return true;
case MotionEvent.ACTION_MOVE:
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
mWindowManager.updateViewLayout(mImgFloatingView, params);
// Log.d("Params", "X: " + params.x + ". Y: " + params.y + ".");
if(params.x == initialX && params.y == initialY) {
Toast.makeText(getBaseContext(), "Test", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
【问题讨论】:
-
ACTION_DOWN 在您第一次将手指放在屏幕上时被调用。然后,如果您将手指放在屏幕上并开始移动它,则会调用 ACTION_MOVE
-
我明白这一点,但我的问题是当我点击
ImageView时,首先调用 ACTION_DOWN,然后调用 ACTION_MOVE。即使我只是点击(单击)而不是移动,也会发生这种情况。这是为什么呢?
标签: java android android-studio onclicklistener ontouchlistener