onTouchEvent と onTouch を使用して多くの実験を行った結果、onTouch は、インターフェイスを宣言し、Listener を正しく配置している限り、必要な場所 (アクティビティであろうとビューであろうと) で機能することがわかりました。一方、onTouchEvent はビュー内でのみ機能します。私の仮定は正しいですか?これが本当の違いですか?
7 に答える
はい、正解です -のユーザーがタッチ イベントを取得するためにonTouch()
使用し、 の派生クラスがタッチ イベントを取得するために使用します。View
onTouchEvent()
View
onTouchEvent() と onTouch() の仕組みに関連して混乱がありました (この質問に対する私のコメントを見ることができます)。以下のいくつかの調査の後、私が見つけたものです。これは初心者には役立つかもしれません。
1) 実装:
onTouch() を使用する場合は、3 つのことを行う必要があります。
1- OnTouchListener を実装する
2-設定したいビューで setOnTouchListener() を呼び出し、イベントをキャッチします
3- onTouch() をオーバーライドしてイベントを処理する
ただし、 onTouchEvent() を使用する場合は、上記の手順 1 と 2 を実行する必要はありません。onTouchEvent() をオーバーライドするだけです。
2) 働く:
onTouch() は、ビュー、ビューグループ、アクティビティで機能します。つまり、ビュー、ビューグループ、またはアクティビティ内で onTouch() を使用できます。このメソッドは 2 つの引数 [onTouch(View v, MotionEvent e) ] を取ります。これにより、アクティビティまたはビュー グループ内のさまざまなビューのイベントをフィルター処理できます。または、アクティビティ自体がそれを処理できます。
onTouchEvent() は 1 つの引数 [ onTouchEvent(MotionEvent e)
] を取ります。したがって、これは、それを実装するビュー内または派生ビューでのみ使用できます。派生ビューは、onTouchEvent() で定義されたタッチ動作の拡張を有効にします。
このようなオプションは、Android のより柔軟な開発哲学の一部だと思いますが、学習者を混乱させることもあります。
onTouchEvent() は、どのビューもタッチ イベントを消費しない場合、Activity によって実際に呼び出されます。
そして、あなたが言うように、 onTouch() は、次の限り、どのクラスでも使用できます。
- そのクラス (つまり Foo) は OnTouchListener インターフェイスを実装し、
- そのクラスは、を使用して登録されたリスナーです
view.setOnTouchListener(foo);
カスタム ビューの作成中に、次のことができます。
@override
onTouchEvent(MotionEvent e){}
一方、onTouch は任意の View、ViewGroup、または Activity に追加できます。
onTouch(View v, MotionEvent e)
{
//you can filter any View's touch
}
onTouch は汎用であり、onTouchEvent は View に固有です。また、onTouch を使用してビューをフィルタリングすることもできます。