贴上一些code:
@Override
public boolean onTouchEvent(MotionEvent event) {
int evt = event.getAction();

switch(evt) {
case MotionEvent.ACTION_DOWN:System.out.println("MotionEvent.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:System.out.println("MotionEvent.ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:System.out.println("MotionEvent.ACTION_UP");
break;
} this.postInvalidate();
return super.onTouchEvent(event);
}
为何指针点了之后屏幕上只有“MotionEvent.ACTION_DOWN”输出而“MotionEvent.ACTION_UP”却没有输出?MotionEvent.ACTION_MOVE是在什么事件下响应?是拖拽事件下响应吗?

解决方案 »

  1.   


    @Override
    public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    Log.d("", " i am down");
    break;
    case MotionEvent.ACTION_UP:
    Log.d("", " i am up");
    break;
    case MotionEvent.ACTION_MOVE:
    Log.d("", " i am move");
    break;
    } return super.onTouchEvent(event);
    }我试了下,是没有问题的,能打出来所有的log,楼主看看你你其他的地方是不是覅有问题……
      

  2.   

    不行啊,还是只打印出"MotionEvent.ACTION_DOWN",试了试你的代码也是只打印出“i am down”
      

  3.   

    ACTION_DOWN、ACTION_MOVE、ACTION_UP
    这三个事件标识出了最基本的用户触摸屏幕的操作,含义也很清楚。虽然大家天天都在用它们,但是有一点请留意。ACTION_DOWN事件作为起始事件,它的重要性是要超过ACTION_MOVE和ACTION_UP的,如果发生了ACTION_MOVE或者ACTION_UP,那么一定曾经发生了ACTION_DOWN
      

  4.   

    如果要想捕获 ACTION_MOVE 事件,必须要设置 setLongClickable(true); 必须,如果没有这个语句,ACTION_MOVE 事件无法捕获至于ACTION_UP 无法捕获,你注释掉 这句 this.postInvalidate(); 试试
      

  5.   

    问题解决了,把return super.onTouchEvent(event)替换为return true就可以了,但为什么呢?
    super.onTouchEvent(event)和 true的区别在哪?为什么会造成这种情况?
      

  6.   

    可能是你的super里面把这个up给消化掉了(屏蔽掉了?), 消息不再转发给你了。
    这个可能要看具体的程序环境