照网上写的一段Touch事件,正常接收到ACTION_DOWN,但ACTION_UP偶尔才能接收到 这是为什么 谢谢

时间:2021-07-11 23:43:48
照网上写的一段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
上面是日志

我划了那么多下,就只有一次接收到

这是为什么,正常应该怎么写?

谢谢

7 个解决方案

#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
那是怎么回事?要怎么改呢?

谢谢 照网上写的一段Touch事件,正常接收到ACTION_DOWN,但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实现左右滑动的判定

#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
那是怎么回事?要怎么改呢?

谢谢 照网上写的一段Touch事件,正常接收到ACTION_DOWN,但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实现左右滑动的判定