Android dispatchTouchEvent

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

转载于:https://my.oschina.net/robslove/blog/393298

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值