61

onTouchEvent と onTouch を使用して多くの実験を行った結果、onTouch は、インターフェイスを宣言し、Listener を正しく配置している限り、必要な場所 (アクティビティであろうとビューであろうと) で機能することがわかりました。一方、onTouchEvent はビュー内でのみ機能します。私の仮定は正しいですか?これが本当の違いですか?

4

7 に答える 7

43

はい、正解です -のユーザーがタッチ イベントを取得するためにonTouch()使用し、 の派生クラスがタッチ イベントを取得するために使用します。ViewonTouchEvent()View

于 2011-02-15T09:51:27.720 に答える
31

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 のより柔軟な開発哲学の一部だと思いますが、学習者を混乱させることもあります。

于 2014-04-13T13:27:58.703 に答える
4

onTouchEvent() は、どのビューもタッチ イベントを消費しない場合、Activity によって実際に呼び出されます

そして、あなたが言うように、 onTouch() は、次の限り、どのクラスでも使用できます。

  1. そのクラス (つまり Foo) は OnTouchListener インターフェイスを実装し、
  2. そのクラスは、を使用して登録されたリスナーですview.setOnTouchListener(foo);
于 2011-02-18T07:29:13.123 に答える
4

カスタム ビューの作成中に、次のことができます。

@override onTouchEvent(MotionEvent e){}

一方、onTouch は任意の View、ViewGroup、または Activity に追加できます。

onTouch(View v, MotionEvent e) { //you can filter any View's touch }

onTouch は汎用であり、onTouchEvent は View に固有です。また、onTouch を使用してビューをフィルタリングすることもできます。

于 2014-12-16T07:28:10.930 に答える