Activity调用dispatchTouchEvent()和onTouchEvent()方法

原创 2015年07月08日 15:30:39

public class MyTextView extends TextView {
	public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
	}

	public MyTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MyTextView(Context context) {
		super(context);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		int action = event.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			Log.e("TAG", "down");
			break;
		case MotionEvent.ACTION_UP:
			Log.e("TAG", "up");
			break;
		case MotionEvent.ACTION_MOVE:
			Log.e("TAG", "move");
			break;
		default:
			break;
		}
		return super.onTouchEvent(event);
	}
}


在Activity中有一个自定义的MyTextView,重写Activity的如下方法:

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		Log.e(MainActivity.class.getSimpleName(), "dispatchTouchEvent");
		return super.dispatchTouchEvent(ev);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		Log.e(MainActivity.class.getSimpleName(), "onTouchEvent");
		return super.onTouchEvent(event);
	}

事件从Activity的dispatchTouchEvent()方法开始传递,当没有Activity中没有view响应此事件的时候。

07-08 15:26:59.488: E/MainActivity(28247): dispatchTouchEvent
07-08 15:26:59.488: E/TAG(28247): down
07-08 15:26:59.488: E/MainActivity(28247): onTouchEvent
07-08 15:26:59.518: E/MainActivity(28247): dispatchTouchEvent
07-08 15:26:59.518: E/MainActivity(28247): onTouchEvent
07-08 15:26:59.548: E/MainActivity(28247): dispatchTouchEvent
07-08 15:26:59.548: E/MainActivity(28247): onTouchEvent
07-08 15:26:59.548: E/MainActivity(28247): dispatchTouchEvent
07-08 15:26:59.548: E/MainActivity(28247): onTouchEvent

(1)从这里可以看到当事件没有被MyTextView消费的时候,Activity的onTouchEvent()方法被调用。

当加入了如下的代码

txt.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View v) {
		if (R.id.txt == v.getId()) {
			Toast.makeText(this, "txt", 1).show();
		}
	}

输出如下:

07-08 15:39:52.613: E/MainActivity(29592): dispatchTouchEvent
07-08 15:39:52.613: E/TAG(29592): down
07-08 15:39:52.653: E/MainActivity(29592): dispatchTouchEvent
07-08 15:39:52.653: E/TAG(29592): move
07-08 15:39:52.663: E/MainActivity(29592): dispatchTouchEvent
07-08 15:39:52.663: E/TAG(29592): move
07-08 15:39:52.673: E/MainActivity(29592): dispatchTouchEvent
07-08 15:39:52.673: E/TAG(29592): up

(2)当事件被MyTextView消费了,Activity的onTouchEvent()方法将不被调用。

用Activity的onTouchEvent方法实现监听手指上下左右滑动

用Activity的onTouchEvent方法实现监听手指上下左右滑动 应用了Activity的ontouchEvent方法监听手指点击事件,手指滑动的时候会先按下,滑倒另一个地方再抬起,...
  • qiantujava
  • qiantujava
  • 2013年08月11日 19:27
  • 33250

Android ListView 与 Activity 的 onTouchEvent 冲突

场景: 在实际开发中你可能需要把ListView中的onTouchEvent写在Activity中进行操作,或者是同时存在对ListView或者Activity的不同向操作(例如向左右向上下滑动绑定不...
  • knighttools
  • knighttools
  • 2014年01月03日 16:52
  • 6933

解决 Android中用里ScrollView 之后 Activity 中的 onTouchEvent 失效问题

失效的原因是因为 TouchEvent() 首先被 scrollView 中的onTouchEvent() (ScrollView 中也有这个方法) ,而且ScrollView  的 onTouchE...
  • cw2004100021124
  • cw2004100021124
  • 2015年09月24日 15:42
  • 1061

listview 与activity的onTouchevent 冲突解决

在项目中有个listview中的下拉刷新需求,打
  • hlglinglong
  • hlglinglong
  • 2014年05月19日 17:06
  • 937

用Activity的onTouchEvent方法实现监听手指上下左右滑动

用Activity的onTouchEvent方法实现监听手指上下左右滑动。 应用了Activity的ontouchEvent方法监听手指点击事件,手指滑动的时候会先按下,滑倒另一个地方再抬起,我们就...
  • Jungle_hello
  • Jungle_hello
  • 2016年06月11日 13:31
  • 660

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。这个是困扰初学者的问题之一,我开...
  • xyz_lmn
  • xyz_lmn
  • 2014年03月05日 21:04
  • 73639

解决 Android中用里ScrollView 之后 Activity 中的 onTouchEvent 失效问题

搬家后的博客链接: IT客栈 www.itkezhan.org 失效的原因是因为 TouchEvent() 首先被 scrollView 中的onTouchEvent() (Scroll...
  • failure01
  • failure01
  • 2013年01月21日 17:47
  • 8812

android Fragment中没有onTouchEvent解决方法

public interface MyTouchListener { public void onTouchEvent(MotionEvent event); } // 保存MyTo...
  • seeytom
  • seeytom
  • 2014年09月15日 16:42
  • 9037

Android7.0 Activity(第一次)点击无响应,onClick,onTouch不执行

最近开发两个项目,遇到了同一个问题:进入Activity中,点击任何地方都没反应。这个问题太奇怪了,问了很多人都没能解决,最后自己一行一行注释,看执行到哪里出的问题,终于解决了。系统:华为v8:And...
  • HandsomeFuHS
  • HandsomeFuHS
  • 2017年02月28日 12:10
  • 1288

onTouchEvent方法的使用

android中onTouchEvent和setOnTouchListener中onTouch的区别可以有些人并不了解,其实要说明白这个问题先要说下android的事件传递机制。首先看下以下的代码1,...
  • z471365897
  • z471365897
  • 2014年03月26日 08:53
  • 670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity调用dispatchTouchEvent()和onTouchEvent()方法
举报原因:
原因补充:

(最多只允许输入30个字)