2011-12-16 6 views

答えて

2

画面に触れると、一番上のビュー(アクティビティのコンテンツビュー)にMotionEventが送出されます。次に、コンテンツビューは、領域に関するいくつかの計算を行い、それがMotionEventを受け取ることができる子を持っているかどうかを決定し、onTouchEvent(MotionEvent)を介してMotionEventが入るViewにMotionEventを渡します。これは、ビューがtrueを返すか、またはMotionEventがトップレベルViewに戻ってそれを処理するか廃棄するかを決定するまでView heirarchyを繰り返し実行します。それはオブザーバー/リスナーパターンを使用しています

View#onTouchEvent(MotionEvent)

ViewGroup#onInterceptTouchEvent(MotionEvent)

+0

私は、イベントとビューの両方を傍受する場所を見つけるために実行されるメソッド(ビュー、イベント)のようなメソッドがあることを期待していました...リスナーについて話していません –

+0

sdkは、ウィンドウがアプリケーションからシステムに来る入力を管理していると言います。私はアンドロイドのソースコードを持っています。 –

+1

まあ、onInterceptTouchはMotionEventをキャッチしますが、動き出しているとは言いません(やはりそれを傍受した)。私がさらに進む前に、あなたは何をしようとしていますか?リスナーに渡されない場合、目的地とイベントを知る必要があるのはなぜですか? – AedonEtLIRA

0

: を参照してください。特定のインターフェイスを実装し、Androidプラットフォームに登録します。これはAndroidプラットフォームがどのクラスとどのメソッドを呼び出すかを知る方法です。

私たちはインターフェイスをメディアとして使用しているので、Androidプラットフォームはどのメソッドを呼び出すかを知っています。クラスは、匿名の内部クラスまたは完全なクラスを作成することによって、提供するものです。

例:今ここに

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // You code 
     } 
    }); 

アンドロイドはView.OnClickListenerインターフェイスメソッドを呼び出しますし、あなたは、引数としてクラスの実際のインスタンスを渡しています。

関連する問題