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会自己消费掉或者继续向上传
。。。。
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事件呢?
谢谢
我Touch的控件TextView外面有一个ScrollView
这时当我不是进行水平划动的时候,这个Move的事件应该是给SCROLLVIEW给拦截了
所以我的TextView就接收不到ACTION_UP事件,而是得到一个ACTION_CANCEL事件
那要怎么处理,才能实现对TextView的Touch事件呢?
谢谢
#5
你是想在ScrollView里面做一个可以滑动的控件吗?那可挺麻烦
#6
ScrollView 里面放了一个TextView 用来显示新闻信息
ScrollView用来上下拖动显示内容
然后我又要给我的TextViewi添加一个左右划动时显示上一条或下一条新闻的功能
所以现在出现上面的问题
要如何解决呢?
谢谢
ScrollView用来上下拖动显示内容
然后我又要给我的TextViewi添加一个左右划动时显示上一条或下一条新闻的功能
所以现在出现上面的问题
要如何解决呢?
谢谢
#7
重写你的Activity的dispatchTouchEvent方法,使用手势监听 GestureDetector并重写OnGestureListener
在dispatchTouchEvent里面将事件传给GestureDetector,在onFling实现左右滑动的判定
在dispatchTouchEvent里面将事件传给GestureDetector,在onFling实现左右滑动的判定
#1
看看收到MotionEvent.ACTION_CANCEL没
#2
case MotionEvent.ACTION_UP:
。。。。
return false;
你返回false,这样下次就不会传递下来了 上层的父ViewGroup会自己消费掉或者继续向上传
。。。。
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事件呢?
谢谢
我Touch的控件TextView外面有一个ScrollView
这时当我不是进行水平划动的时候,这个Move的事件应该是给SCROLLVIEW给拦截了
所以我的TextView就接收不到ACTION_UP事件,而是得到一个ACTION_CANCEL事件
那要怎么处理,才能实现对TextView的Touch事件呢?
谢谢
#5
你是想在ScrollView里面做一个可以滑动的控件吗?那可挺麻烦
#6
ScrollView 里面放了一个TextView 用来显示新闻信息
ScrollView用来上下拖动显示内容
然后我又要给我的TextViewi添加一个左右划动时显示上一条或下一条新闻的功能
所以现在出现上面的问题
要如何解决呢?
谢谢
ScrollView用来上下拖动显示内容
然后我又要给我的TextViewi添加一个左右划动时显示上一条或下一条新闻的功能
所以现在出现上面的问题
要如何解决呢?
谢谢
#7
重写你的Activity的dispatchTouchEvent方法,使用手势监听 GestureDetector并重写OnGestureListener
在dispatchTouchEvent里面将事件传给GestureDetector,在onFling实现左右滑动的判定
在dispatchTouchEvent里面将事件传给GestureDetector,在onFling实现左右滑动的判定