原创, 安卓, , ,

Solve Android OnTouchListener OnTouch MotionEvent.ACTION_UP ACTION_MOVE Invalid解决Android OnTouchListener OnTouch MotionEvent.ACTION_UP ACTION_MOVE 无效问题

使用Android OnTouchListener 的 监听处理MotionEvent的ACTION_UP和ACTION_MOVE无效,ACTION_DOWN正常问题。原因出在监听的对象上。

经过本人测试发现,如果监听的对象宽度占满整个宽度(无法使用左右滑动),或者高度占满整个高度(无法使用上下滑动),或者占满全屏,OnTouch 只会触发ACTION_DOWN,无法触发ACTION_UP,ACTION_MOVE或其他。

不过这里让我很迷惑,为什么别人还可以使用左右滑动来实现整个Activity的移动,这个还有带研究。

几个重要信息:

  1. 必须 implements OnTouchListener
  2. 必须 TextView textView.setOnTouchListener(this);
  3. 当然必须有在 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的移动,这个还有带研究。

几个重要信息:

  1. 必须 implements OnTouchListener
  2. 必须 TextView textView.setOnTouchListener(this);
  3. 当然必须有在 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;
	}

(11584)

Related Post