标签:
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
标签:
原文地址:http://my.oschina.net/u/265368/blog/393298