Androidイベント配信メカニズムにより、簡単に気に入っていただけるようになります。

最近面接の準備をしています。たくさん見直しました。最も単純な言葉を使って、過去から学んだ新しい知識ポイントを表現します。一つは録音することです。第二に、それが皆を助けることができれば、より良い

1.イベント配信の3つの重要な方法

まず、ランダムにViewGroupを作成しました。3つの重要なメソッドは

  • dispatchTouchEvent
  • onInterceptTouchEvent
  • onTouchEvent
public class MyViewGroup extends ViewGroup {
    
    
    //...省略部分代码
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    
    
        return super.dispatchTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    
    
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
    
        return super.onTouchEvent(event);
    }
}

次に、これら3つの方法について簡単に説明します。

方法 効果 呼び出し時間
dispathTouchEvent() クリックイベントの配信(配信) クリックイベントが現在のビューに渡されると、メソッドが呼び出されます。
onInterceptTouchEvent() イベントがインターセプトされるかどうかを決定します(ViewGroupでのみ、通常のビューにはこのメソッドがありません)。 dispathTouchEvent()内で呼び出されます
onTouchEvent() クリックイベントの処理 dispathTouchEvent()内で呼び出されます

イベント配信の順序は、Activity(Window)-> ViewGroup-> Viewです。


2.動きを拡大し、イベント配布プロセスを分析します。


写真の中の:

  • super:親メソッドを呼び出す
  • true:消費イベント、つまり、イベントは引き継がれません
  • false:イベントは消費されず、イベントは引き継がれず、処理のために親コントロールのonTouchEvent()に渡されません。

上の図を見てください。分析は次のとおりです。合計3つのステップがあります。


ステップ1(アクティビティ中):

アクティビティの最初のdispatchTouchEvent()イベント
が値を返します:
true / false ------->消費イベント(ここではfalseも消費イベントです)
スーパー------------->イベントが発行されますViewGroupに移動し、ViewGroupのdispatchTouchEvent()を呼び出します


ステップ2(ViewGroup内)

ViewGroup内
イベントのdispatchTouchEvent()戻り値:
true -------------->消費イベント
false ------------->イベントは消費されません。親コントロールのonTouchEvent()に送信して、
スーパーを処理します------------->イベントは、現在のViewGroupのonInterceptTouchEvent()に送信されます

ViewGroup内
イベントonInterceptTouchEvent()の戻り値:
true -------------->イベントは現在のViewGroupのonTouchEvent()に配信されます
false / super ----->イベント子ビュー、子ビューのdispatchTouchEvent()を呼び出す

ViewGroup内のイベントのonTouchEvent()の
戻り値:
true --------------> Consumption event
false / super ----->イベントは消費されず、送信もされず、親コントロールに渡されます。 OnTouchEvent()の処理


ステップ3(子ビューで)

ビュー
イベントのdispatchTouchEvent()戻り値:
true -------------->消費イベント
false ------------->イベントは消費されず、ダウンされません親コントロールのonTouchEvent()に送信して、
スーパーを処理します------------->イベントは現在のビューのonTouchEvent()に送信されます

ビュー内
イベントのonTouchEvent()戻り値:
true -------------->消費イベント
false /スーパー----->イベントを消費せず、親コントロールにも送信しません。 OnTouchEvent()の処理


これらの分析を読んだ後、気軽にイベント配信メカニズムにアクセスできます!3つのステップの概要。あなたはそれを好きに興奮していますか?

おすすめ

転載: blog.csdn.net/leol_2/article/details/102798906