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

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

事件傳遞

2019-11-09 18:50:17
字體:
來源:轉載
供稿:網友
//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群英傳


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 花垣县| 三原县| 河源市| 时尚| 奉节县| 凤翔县| 蛟河市| 雅安市| 鄂托克前旗| 南宫市| 深泽县| 连平县| 大港区| 长白| 德庆县| 嘉定区| 墨脱县| 兴安盟| 丁青县| 岳阳市| 珲春市| 昌吉市| 濮阳县| 洱源县| 外汇| 溧阳市| 老河口市| 垦利县| 柳州市| 广州市| 溧阳市| 喀喇| 彭水| 黔西县| 福泉市| 花垣县| 白沙| 涞源县| 甘德县| 偏关县| 安龙县|