码迷,mamicode.com
首页 > 移动开发 > 详细

Android dispatchTouchEvent

时间:2015-03-29 18:15:47      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

dispatchTouchEvent

// 没有子视图的 View 的 dispatchTouchEvent() 方法
public boolean dispatchTouchEvent(MotionEvent event)
 {
	// ...
 
 	// View.setOnTouchLisener() 方法设置的触摸事件监听者
	ListenerInfo li = mListenerInfo;

	// 如果设置了监听者, 优先调用 OnTouchListener.onTouch()
	if (li != null && li.mOnTouchListener != null
			&& (mViewFlags & ENABLED_MASK) == ENABLED
			&& li.mOnTouchListener.onTouch(this, event)) {

		// 如果 OnTouchListener.onTouch() 完成了事件处理
		return true;
	}

	// 如果监听者没有完成事件处理(或者没有监听者), 再调用 onTouchEvent()
	if (onTouchEvent(event)) {
		// 如果 onTouchEvent() 完成了事件处理
		return true;
	}

	// ...

	// 如果 OnTouchListener.onTouch() 和 onTouchEvent() 都没有完成事件处理
	return false;
}


onTouchListener的接口的优先级是要高于onTouchEvent的,假若onTouchListener中的onTouch方法返回true,那onTouchEvent是接收不到消息的,因为Button的performClick是在onTouchEvent实现,假若onTouchEvent没有被调用到,那么Button的Click事件也无法响应

//performClick 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件)
-----------------------------------------
boolean android.view.View.performClick()

Call this view‘s OnClickListener, if it is defined.
Returns:
True there was an assigned OnClickListener that was called, false otherwise is returned.
---------------------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    
    btn1 = (Button) findViewById(R.id.button1);
    tv1 = (TextView) findViewById(R.id.textView1);
    btn1.performClick();
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        tv1.setText("已经被点击过了");
        }
    });
}

http://www.cnblogs.com/superlcr/p/3946034.html?utm_source=tuicool

Android dispatchTouchEvent

标签:

原文地址:http://my.oschina.net/u/265368/blog/393298

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!