原创, 安卓ACTION_DOWN, ACTION_UP, onTouch, OnTouchListener
Solve Android OnTouchListener OnTouch MotionEvent.ACTION_UP ACTION_MOVE Invalid解决Android OnTouchListener OnTouch MotionEvent.ACTION_UP ACTION_MOVE 无效问题
- by chenxue4076
- 11 years ago
使用Android OnTouchListener 的 监听处理MotionEvent的ACTION_UP和ACTION_MOVE无效,ACTION_DOWN正常问题。原因出在监听的对象上。
经过本人测试发现,如果监听的对象宽度占满整个宽度(无法使用左右滑动),或者高度占满整个高度(无法使用上下滑动),或者占满全屏,OnTouch 只会触发ACTION_DOWN,无法触发ACTION_UP,ACTION_MOVE或其他。
不过这里让我很迷惑,为什么别人还可以使用左右滑动来实现整个Activity的移动,这个还有带研究。
几个重要信息:
- 必须 implements OnTouchListener
- 必须 TextView textView.setOnTouchListener(this);
- 当然必须有在 onTouch(View v, MotionEvent event) 里面调用
下面给个代码作为例子
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
downX = (int)event.getX();
Toast.makeText(getApplication(), "Down", Toast.LENGTH_SHORT).show();
break;
case MotionEvent.ACTION_UP:
upX = (int)event.getX();
Toast.makeText(getApplication(), "Up", Toast.LENGTH_SHORT).show();
//do things here
if(upX - downX > 100){
Toast.makeText(this, "right", Toast.LENGTH_LONG).show();
}else if(downX - upX > 100){
Toast.makeText(this, "left", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
return false;
}
使用Android OnTouchListener 的 监听处理MotionEvent的ACTION_UP和ACTION_MOVE无效,ACTION_DOWN正常问题。原因出在监听的对象上。
经过本人测试发现,如果监听的对象宽度占满整个宽度(无法使用左右滑动),或者高度占满整个高度(无法使用上下滑动),或者占满全屏,OnTouch 只会触发ACTION_DOWN,无法触发ACTION_UP,ACTION_MOVE或其他。
不过这里让我很迷惑,为什么别人还可以使用左右滑动来实现整个Activity的移动,这个还有带研究。
几个重要信息:
- 必须 implements OnTouchListener
- 必须 TextView textView.setOnTouchListener(this);
- 当然必须有在 onTouch(View v, MotionEvent event) 里面调用
下面给个代码作为例子
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
downX = (int)event.getX();
Toast.makeText(getApplication(), "Down", Toast.LENGTH_SHORT).show();
break;
case MotionEvent.ACTION_UP:
upX = (int)event.getX();
Toast.makeText(getApplication(), "Up", Toast.LENGTH_SHORT).show();
//do things here
if(upX - downX > 100){
Toast.makeText(this, "right", Toast.LENGTH_LONG).show();
}else if(downX - upX > 100){
Toast.makeText(this, "left", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
return false;
}
(11659)