照网上写的一段Touch事件,正常接收到ACTION_DOWN,但ACTION_UP偶尔才能接收到 private float m_MotionX;
private OnTouchListener onTouch = new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
m_MotionX = event.getX();
Log.d(TAG, "MotionEvent.ACTION_DOWN:" + m_MotionX + "");
return true;
case MotionEvent.ACTION_UP:
if (event.getX() > m_MotionX) {
next();
} else if (event.getX() < m_MotionX) {
previous();
}
Log.d(TAG,
"MotionEvent.ACTION_UP:" + m_MotionX + " "
+ event.getX());
return false;
default:
break;
}
return false;
// true: 1.告诉Android,MotionEvent对象已被使用,不能再提供给其他方法。
// 2.还告诉Android,继续将此触摸序列的触摸事件(move,up)发送到此方法。
// false:1.告诉Android,onTouch()方法未使用该事件,所以Android寻找要调用的下一个方法。
// 2.告诉Android。不再将此触摸序列的触摸事件(move,up)发送到此方法。
}
};10-17 23:40:16.747: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:188.91553
10-17 23:40:17.948: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:192.83923
10-17 23:40:18.359: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:542.049
10-17 23:40:18.709: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:485.1553
10-17 23:40:19.390: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:263.46594
10-17 23:40:19.660: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:255.61853
10-17 23:40:20.031: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:431.5313
10-17 23:40:21.022: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:262.15802
10-17 23:40:21.252: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:87.55313
10-17 23:40:21.722: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:238.6158
10-17 23:40:21.883: D/NewsDetailActivity(4965): MotionEvent.ACTION_UP:238.6158 565.32153
10-17 23:40:21.943: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:489.079
10-17 23:40:22.253: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:438.07083
10-17 23:40:23.444: D/NewsDetailActivity(4965): MotionEvent.ACTION_DOWN:193.49318
上面是日志我划了那么多下,就只有一次接收到这是为什么,正常应该怎么写?谢谢

解决方案 »

  1.   

    看看收到MotionEvent.ACTION_CANCEL没
      

  2.   

    case MotionEvent.ACTION_UP:
            。
                return false;
    你返回false,这样下次就不会传递下来了  上层的父ViewGroup会自己消费掉或者继续向上传
      

  3.   


    @Override
    public boolean onTouch(View v, MotionEvent event) {

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    m_MotionX = event.getX();
    Log.d(TAG, "MotionEvent.ACTION_DOWN:" + m_MotionX + "");
    return true;
    case MotionEvent.ACTION_CANCEL:
    Log.d(TAG, "MotionEvent.ACTION_CANCEL");
    return true;
    case MotionEvent.ACTION_UP:
    if (event.getX() > m_MotionX) {
    next();
    } else if (event.getX() < m_MotionX) {
    previous();
    }
    Log.d(TAG,
    "MotionEvent.ACTION_UP:" + m_MotionX + " "
    + event.getX());
    return true;
    default:
    break;
    }
    return true;
    // true: 1.告诉Android,MotionEvent对象已被使用,不能再提供给其他方法。
    // 2.还告诉Android,继续将此触摸序列的触摸事件(move,up)发送到此方法。
    // false:1.告诉Android,onTouch()方法未使用该事件,所以Android寻找要调用的下一个方法。
    // 2.告诉Android。不再将此触摸序列的触摸事件(move,up)发送到此方法。
    }
    我改为这样了,日志是出现了ACTION_CANCEL
    如下:
    10-18 11:10:53.878: D/NewsDetailActivity(14969): MotionEvent.ACTION_DOWN:196.76294
    10-18 11:10:54.138: D/NewsDetailActivity(14969): MotionEvent.ACTION_UP:196.76294 649.0539
    10-18 11:10:55.650: D/NewsDetailActivity(14969): MotionEvent.ACTION_DOWN:153.60217
    10-18 11:10:55.770: D/NewsDetailActivity(14969): MotionEvent.ACTION_CANCEL
    10-18 11:10:56.921: D/NewsDetailActivity(14969): MotionEvent.ACTION_DOWN:112.40327
    10-18 11:10:57.022: D/NewsDetailActivity(14969): MotionEvent.ACTION_CANCEL
    10-18 11:10:57.923: D/NewsDetailActivity(14969): MotionEvent.ACTION_DOWN:133.98364
    10-18 11:10:58.033: D/NewsDetailActivity(14969): MotionEvent.ACTION_CANCEL
    10-18 11:10:58.733: D/NewsDetailActivity(14969): MotionEvent.ACTION_DOWN:127.44414
    10-18 11:10:58.994: D/NewsDetailActivity(14969): MotionEvent.ACTION_UP:127.44414 644.7193只要有Cancel的地方就没有了ACTION——UP
    那是怎么回事?要怎么改呢?谢谢
      

  4.   

    我可能知道原因了
    我Touch的控件TextView外面有一个ScrollView
    这时当我不是进行水平划动的时候,这个Move的事件应该是给SCROLLVIEW给拦截了
    所以我的TextView就接收不到ACTION_UP事件,而是得到一个ACTION_CANCEL事件那要怎么处理,才能实现对TextView的Touch事件呢?谢谢
      

  5.   

    你是想在ScrollView里面做一个可以滑动的控件吗?那可挺麻烦
      

  6.   

    ScrollView 里面放了一个TextView 用来显示新闻信息
    ScrollView用来上下拖动显示内容
    然后我又要给我的TextViewi添加一个左右划动时显示上一条或下一条新闻的功能所以现在出现上面的问题
    要如何解决呢?谢谢
      

  7.   

    重写你的Activity的dispatchTouchEvent方法,使用手势监听 GestureDetector并重写OnGestureListener
    在dispatchTouchEvent里面将事件传给GestureDetector,在onFling实现左右滑动的判定