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