TouchEvent的傳遞機制

來源:互聯網
上載者:User

標籤:

dispatchTouchEvent  分發事件
return false; //表示分發,預設false; return true; // 表示不分發;

onInterceptTouchEvent 攔截事件
當dispatchTouchEvent  確認分發,會啟動攔截事件;return false; //表示不攔截,預設false; return true; // 表示攔截;注意:攔截是相當於它的孩子(也就是說不會攔截自己,如果攔截,則TouchEvent會傳到他自己,而它孩子就接收不)不攔截會繼續往他的孩子遞迴是否onInterceptTouchEvent ;

onTouchEvent  觸摸事件
return false; //表示不消費,預設false; return true; // 表示消費;當onInterceptTouchEvent 確認攔截,會問自己是否要消費TouchEvent,如果攔截了又不消費則,Touch結束;

invalidate():讓整個view失效,這樣view會被重新調用, 配合onDraw()使用;
事件的分發原理圖:圖1:圖二:



案列: 分發的例子下面紅色框地區的結構是ScrollView, 它的孩子是一些TextView;分析:1.當點擊它任意一個孩子(TextView)時,如果ScrollView不進行onInterceptTouchEvent ,則它就不可以在菜單上進行左右滑動;2.但是如果攔截了全部,則它的孩子又會消費不了TouchEvent;

解決方案:只有左右移動的時候進行攔截,這樣父親就擁有了TouchEvent,可在菜單上繼續左右滑動,而上下移動或靜止的時候就不攔截,這樣孩子又有了TouchEvent,那麼孩子就可以點擊了;
執行個體代碼:/** * 當滑動的時候,需要攔截TouchEvent時間,讓scrollView消化,否則會分發到孩子去; * 當不滑動的停止的時候,不攔截,則會分發到孩子去,也就是TexView; */@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {    switch (ev.getAction()) {    // 只有水平滑動時才攔截touch    case MotionEvent.ACTION_DOWN:        startX = (int) (ev.getRawX() + 0.5f);        startY = (int) (ev.getRawY() + 0.5f);        break;    case MotionEvent.ACTION_MOVE:        int newX = (int) (ev.getRawX() + 0.5f);        int newY = (int) (ev.getRawY() + 0.5f);        int dx = Math.abs(startX - newX);        int dy = Math.abs(startY - newY);        if (dx > dy) {            // 水平滑動,只有水平滑動才會dx.dy            return true;        }        startX = (int) ev.getRawX();// 初始化當前位置    case MotionEvent.ACTION_UP:        break;    }    return super.onInterceptTouchEvent(ev);}  







來自為知筆記(Wiz)

TouchEvent的傳遞機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.