国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

事件傳遞

2019-11-09 17:53:34
字體:
來源:轉載
供稿:網友
//ViewGroup的事件處理 @Override public boolean dispatchTouchEvent(MotionEvent event) { boolean consume = false; if (onInterceptTouchEvent(event)) {//ViewGroup攔截(viewgroup默認不攔截) consume = onTouchEvent(event);//則ViewGroup處理事件 } else {//ViewGroup不攔截 consume = child.dispatchTouchEvent(event);//則子view派發事件 } return consume; }

事件的傳遞:隧道式派發

先執行dispatchTouchEvent方法 再執行onInterceptTouchEvent方法(view無此方法) true,攔截,不用派發給下級 false,不攔截,派發給下級

事件的處理:冒泡式消費

只執行onTouchEvent方法(view沒有攔截方法,事件傳遞過來時一定會執行這個方法,當clickable和longclickable都為true時如button默認消費事件) true,處理了,不用處理了 false,沒處理,給上級處理

dispatchTouchEvent方法:事件傳遞到當前view,此方法一定會被調用,返回值受當前view的onTouchEvent和下級view的dispatchTouchEvent返回值影響。

最后一級view一定會調用onTouchEvent方法。

例子如下:

Markdown

MyView

public class MyView extends View { //處理事件 @Override public boolean onTouchEvent(MotionEvent event) { Log.e("TouchEvent","MyView==onTouchEvent=="+super.onTouchEvent(event)+"==" +event.getAction()+"=="+System.currentTimeMillis()); return super.onTouchEvent(event); } //派發事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { Log.e("TouchEvent","MyView==dispatchTouchEvent=="+super.onTouchEvent(ev)+"==" +ev.getAction()+"=="+System.currentTimeMillis()); return super.dispatchTouchEvent(ev); } public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); }}

ViewGroupA

public class ViewGroupA extends LinearLayout { //處理事件 @Override public boolean onTouchEvent(MotionEvent event) { Log.e("TouchEvent","ViewGroupA==onTouchEvent=="+super.onTouchEvent(event)+"==" +event.getAction()+"=="+System.currentTimeMillis()); return super.onTouchEvent(event); } //派發事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { Log.e("TouchEvent","ViewGroupA==dispatchTouchEvent=="+super.onTouchEvent(ev)+"==" +ev.getAction()+"=="+System.currentTimeMillis()); return super.dispatchTouchEvent(ev); } //攔截事件 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { Log.e("TouchEvent","ViewGroupA==onInterceptTouchEvent=="+super.onTouchEvent(ev)+"==" +ev.getAction()+"=="+System.currentTimeMillis()); return super.onInterceptTouchEvent(ev); } //構造方法 public ViewGroupA(Context context) { super(context); } public ViewGroupA(Context context, AttributeSet attrs) { super(context, attrs); } public ViewGroupA(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }}

ViewGroupB

public class ViewGroupB extends LinearLayout { //處理事件 @Override public boolean onTouchEvent(MotionEvent event) { Log.e("TouchEvent","ViewGroupB==onTouchEvent=="+super.onTouchEvent(event)+"==" +event.getAction()+"=="+System.currentTimeMillis()); return super.onTouchEvent(event); } //派發事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { Log.e("TouchEvent","ViewGroupB==dispatchTouchEvent=="+super.onTouchEvent(ev)+"==" +ev.getAction()+"=="+System.currentTimeMillis()); return super.dispatchTouchEvent(ev); } //攔截事件 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { Log.e("TouchEvent","ViewGroupB==onInterceptTouchEvent=="+super.onTouchEvent(ev)+"==" +ev.getAction()+"=="+System.currentTimeMillis()); return super.onInterceptTouchEvent(ev); } public ViewGroupB(Context context) { super(context); } public ViewGroupB(Context context, AttributeSet attrs) { super(context, attrs); } public ViewGroupB(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }}

布局:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.myapplication.MainActivity"> <com.example.administrator.myapplication.ViewGroupA android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_blue_bright"> <com.example.administrator.myapplication.ViewGroupB android:layout_width="300dp" android:layout_height="300dp" android:background="@android:color/holo_green_dark"> <com.example.administrator.myapplication.MyView android:layout_width="150dp" android:layout_height="150dp" android:background="@android:color/darker_gray" /> </com.example.administrator.myapplication.ViewGroupB> </com.example.administrator.myapplication.ViewGroupA></RelativeLayout>

點擊ViewGroupA

02-06 11:48:55.295 10298-10298/? E/TouchEvent: ViewGroupA==dispatchTouchEvent==false==0==148635293529502-06 11:48:55.295 10298-10298/? E/TouchEvent: ViewGroupA==onInterceptTouchEvent==false==0==148635293529502-06 11:48:55.295 10298-10298/? E/TouchEvent: ViewGroupA==onTouchEvent==false==0==1486352935295

點擊ViewGroupB

02-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupA==dispatchTouchEvent==false==0==148635286083402-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupA==onInterceptTouchEvent==false==0==148635286083502-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupB==dispatchTouchEvent==false==0==148635286083502-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupB==onInterceptTouchEvent==false==0==148635286083502-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupB==onTouchEvent==false==0==148635286083502-06 11:47:40.835 10298-10298/? E/TouchEvent: ViewGroupA==onTouchEvent==false==0==1486352860835

點擊MyView

02-06 11:45:01.557 10298-10298/? E/TouchEvent: ViewGroupA==dispatchTouchEvent==false==0==148635270155602-06 11:45:01.557 10298-10298/? E/TouchEvent: ViewGroupA==onInterceptTouchEvent==false==0==148635270155702-06 11:45:01.557 10298-10298/? E/TouchEvent: ViewGroupB==dispatchTouchEvent==false==0==148635270155702-06 11:45:01.557 10298-10298/? E/TouchEvent: ViewGroupB==onInterceptTouchEvent==false==0==148635270155702-06 11:45:01.557 10298-10298/? E/TouchEvent:MyView==dispatchTouchEvent==false==0==148635270155702-06 11:45:01.557 10298-10298/? E/TouchEvent: MyView==onTouchEvent==false==0==148635270155702-06 11:45:01.562 10298-10298/? E/TouchEvent:ViewGroupB==onTouchEvent==false==0==148635270156202-06 11:45:01.562 10298-10298/? E/TouchEvent: ViewGroupA==onTouchEvent==false==0==1486352701562

參考:

Android藝術探索 Android群英傳


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎兰屯市| 体育| 东港市| 古丈县| 龙胜| 南开区| 尉氏县| 桦川县| 延庆县| 裕民县| 雅安市| 寿宁县| 阿勒泰市| 老河口市| 余姚市| 保山市| 扎鲁特旗| 静安区| 福泉市| 中超| 普洱| 宕昌县| 东城区| 萝北县| 余江县| 广东省| 平舆县| 万年县| 彭泽县| 顺昌县| 和平县| 普兰店市| 呼玛县| 南开区| 宁德市| 平潭县| 望谟县| 台北市| 扎赉特旗| 林口县| 宜兰市|