如何在OnTouchListener()上检测和区分setOnClickListener事件和事件ACTION_MOVE?

时间:2014-08-03 15:19:49

标签: android motionevent

我在Android中创建了一个图像视图,并尝试通过用户的手指使其移动。

我需要处理2个事件,一个是我想要移动ImageView,另一个是长按它。

但是,我遇到一个问题,当我移动ImageView时,我的手指总是在屏幕上。这也意味着将调用setOnClickListener()。 因此,在移动对象时,我无法在setOnClickListener上执行此操作。

我想得到你的建议和咨询。如果可能的话,我会特别感谢你。

1 个答案:

答案 0 :(得分:0)

请参阅MotionEvent

onTouchEvent(MotionEvent touchevent) 

有几种行为被定义来区分事件,例如, ACTION_MOVEACTION_DOWN。见this example

public boolean onTouchEvent(MotionEvent touchevent) 
{
  switch (touchevent.getAction())
  {
     case MotionEvent.ACTION_DOWN: 
     {
         ...
         break;
     }
     case MotionEvent.ACTION_UP: 
     {
         ...

查找另一个示例here

view.setOnTouchListener(new OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
        // do something
        break;
    case MotionEvent.ACTION_MOVE:
        // do something else
        break;
    }
    return false;
  }
});