Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android下ViewGroup的事件分發和處理

android下ViewGroup的事件分發和處理

編輯:關於Android編程

先寫個簡單的demo:

布局文件中一個繼承自ViewGroup的自定義控件MyLayout包含一個Button:

 

 

自定義控件中重寫事件分發的兩個重要方法:onInterceptTouchEvent 和 dispatchTouchEvent

 

public class MyLayout extends LinearLayout {

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

	//是否攔截事件的傳遞,true:攔截
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		//false:把touch事件傳遞到子控件
		return false;
	}
	
	//LinearLayout並沒有重寫dispatchTouchEvent
	//ViewGroup重寫了View的dispatchTouchEvent方法
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		return super.dispatchTouchEvent(ev);
	}
}
在MainActivity中設置兩個控件的點擊事件:

 

 

		layout.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.i(tag, click layout --------);
			}
		});
		
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.i(tag, click button --------);
			}
		});

此時點擊Button,由於在外層MyLayout沒有阻止事件的傳遞,所以Button響應並處理了事件,打印click button的log

 

如果在MyLayout的onInterceptTouchEvent 中return true則表示MyLayout阻止了事件的傳遞,此時打印click layout

問題:當點擊屏幕時系統如何確定是哪個view被點中呢?

實際上每個view對應屏幕上的一塊矩形區域,當點擊屏幕時系統通過判斷該點屬於哪塊矩形區域來確定哪個view被選中

 


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved