亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

事件傳遞

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群英傳


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费黄色网| 国产va免费精品高清在线观看| 国产精品久久久久久久久久久新郎| 久久夜色精品亚洲噜噜国产mv| 亚洲国产精品成人一区二区| 亚洲www在线| 亚洲网址你懂得| 538国产精品一区二区免费视频| 欧美日韩第一视频| 亚洲一区二区三区久久| 91在线视频精品| 日韩中文字幕国产精品| 97色在线观看免费视频| 久久国产精品影片| 97超视频免费观看| 日本精品在线视频| 国产免费久久av| 欧美精品在线极品| 久久久亚洲国产天美传媒修理工| 国产精品三级久久久久久电影| 91精品免费看| 久久精品国产成人| 国产精品香蕉av| 国产精品久久久久久久av大片| 91精品国产综合久久男男| 国产婷婷成人久久av免费高清| 美女福利精品视频| 97av在线视频免费播放| 日韩精品免费在线视频观看| 久久国产精品久久精品| 亚洲人成网站999久久久综合| 国产精品免费网站| 国产精品麻豆va在线播放| 91po在线观看91精品国产性色| 91av视频在线播放| 色综合天天狠天天透天天伊人| 国产精品免费小视频| 亚洲欧洲视频在线| 欧美一级在线播放| 亚洲一区二区三区毛片| 国产一区二区三区精品久久久| 日韩在线观看成人| 最近的2019中文字幕免费一页| 亚洲精品电影网站| 自拍偷拍亚洲区| 91精品啪在线观看麻豆免费| 成人黄色中文字幕| 欧美日韩美女在线观看| 海角国产乱辈乱精品视频| 精品一区精品二区| 日韩成人激情影院| 久久亚洲综合国产精品99麻豆精品福利| 欧美精品18videos性欧美| 91在线|亚洲| 欧美激情第99页| 国产91ⅴ在线精品免费观看| 少妇av一区二区三区| 国产精品白嫩初高中害羞小美女| 亚洲欧美国产视频| 日韩欧美aⅴ综合网站发布| 亚洲人成自拍网站| 一区二区欧美亚洲| 久久久久国产精品一区| 久久五月天色综合| 91久久久久久久久久久| 欧美中文字幕在线| 亚洲人成在线观看网站高清| 国产亚洲一区二区精品| 国产97免费视| 日韩a**中文字幕| 91人人爽人人爽人人精88v| 91福利视频在线观看| 国产福利视频一区二区| 亚洲精品91美女久久久久久久| 亚洲天堂日韩电影| 久久国产一区二区三区| 色yeye香蕉凹凸一区二区av| 日韩欧美视频一区二区三区| 国产激情综合五月久久| 91超碰中文字幕久久精品| 国产亚洲美女久久| 精品激情国产视频| 国产又爽又黄的激情精品视频| 成人av在线亚洲| 97国产suv精品一区二区62| 红桃av永久久久| 久久精品国产视频| 国模吧一区二区三区| 亚洲激情视频网站| 国产精品v片在线观看不卡| 亚洲高清免费观看高清完整版| 国产欧美婷婷中文| 韩日精品中文字幕| 久久久精品999| 亚洲第一福利视频| 国产精品直播网红| 成人精品视频在线| 91精品国产91久久久久久最新| 久久久在线观看| 色婷婷久久一区二区| 中文字幕亚洲欧美在线| 在线观看精品自拍私拍| 国产精品手机播放| 在线色欧美三级视频| 久久在线免费观看视频| 992tv成人免费影院| 在线成人激情黄色| 国产日产久久高清欧美一区| 九九久久精品一区| 不用播放器成人网| 欧美日韩一区免费| 国语自产精品视频在线看一大j8| 97超级碰在线看视频免费在线看| 国产精品美乳一区二区免费| 夜夜嗨av一区二区三区四区| 麻豆国产va免费精品高清在线| 日韩中文第一页| 在线观看日韩www视频免费| 国产不卡视频在线| 亚洲激情在线观看| 久久99视频精品| 欧美在线视频一区| 国产精品视频一区二区高潮| 日日摸夜夜添一区| 亚洲二区在线播放视频| 欧美精品一区二区三区国产精品| 亚洲字幕一区二区| 国产成人综合精品| 欧美大片va欧美在线播放| 91精品视频一区| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品suv精品一区二区| 欧美日韩国产丝袜美女| 亚洲国产成人av在线| 精品久久久久久久久中文字幕| 91成人在线视频| 国产精品亚洲аv天堂网| 久久久久久免费精品| 国产精品男人爽免费视频1| 91精品国产91久久久久久不卡| 久久久综合免费视频| 亚洲国产高清福利视频| 综合欧美国产视频二区| 国产精品久久电影观看| 欧美精品少妇videofree| 国产精品爱久久久久久久| 亚洲成年网站在线观看| 中文字幕综合一区| 日韩黄色在线免费观看| 亚洲激情第一页| 亚洲free性xxxx护士hd| 国产精品视频免费在线观看| 亚洲欧美国产精品| 久久成人在线视频| 亚洲男人天堂网| 7m精品福利视频导航| 成人网欧美在线视频| 国产精品第二页| 久久视频在线观看免费| 国产99久久久欧美黑人| 91精品中国老女人| 欧洲亚洲免费视频| 高跟丝袜欧美一区| 亚洲精品国产精品乱码不99按摩|