3

私は小さいながらも素晴らしいオープン ソース プロジェクトに取り組んでいRealViewSwitcherます。Android の Launcher のように、水平方向のフリングを実行して複数のビューを切り替えることができます。ViewGroup実装onInterceptTouchEventonTouchEventて物事を機能させるのは単純です。実際、ほとんどのコードはファイルWorkspace.java(572 行目以降) から取得したものであり、タッチ イベントを処理する 2 つのメソッドも同様です。多くの変更はありません。

しかし、私はこのことを機能させません。私の現在の労働者階級はここに投稿されています(かなり大きいのでpastebinに掲載されています): http://pastebin.com/8p8GCEZK

クラスを実行すると (クラスを作成し、いくつかの TextView を追加して、それをアクティビティのコンテンツ ビューとして設定するだけです)、クイック フリングを実行すると、次の出力が得られます。

12-15 23:53:04.797: INFO/RealViewSwitcher(7477): intercept ACTION_DOWN
12-15 23:53:04.797: INFO/RealViewSwitcher(7477): touch ACTION_DOWN
12-15 23:53:04.807: INFO/RealViewSwitcher(7477): touch ACTION_MOVE
12-15 23:53:04.840: INFO/RealViewSwitcher(7477): touch ACTION_MOVE
12-15 23:53:04.867: INFO/RealViewSwitcher(7477): touch ACTION_MOVE
12-15 23:53:04.897: INFO/RealViewSwitcher(7477): touch ACTION_MOVE
12-15 23:53:04.897: INFO/RealViewSwitcher(7477): touch ACTION_UP

私の問題は次のとおりです。私が何をしても、ACTION_MOVE私のonInterceptTouchEvent方法では得られません。私はドキュメントを何度も読み、戻り値をいじろうとしましたが、そこ以外のイベントは取得しません。ACTION_DOWNフリングを開始する実際のコードがACTION_MOVEケースにあるため、これは醜いです。

ここで私を助けてもらえますか?私が得られない厄介なこと:公式のランチャーアプリケーションでも同じように実装されているようです。しかし、彼らのコードは機能しますが、私のコードは機能しません。私は何が欠けていますか?

4

3 に答える 3

2

実際には非常に簡単です:

1) onInterceptTouchEvent から false を返す場合:

  • 現在のイベントは、必要に応じて処理した後、ターゲット (子) ビューの onTouchEvent メソッドにもディスパッチされます。
  • 次のイベントは引き続き onInterceptTouchEvent にディスパッチされます

2) onInterceptTouchEvent から true を返す場合:

  • 現在のイベントはターゲット ビューによって処理されません。ターゲット ビューは同じイベントを受け取りますが、アクション ACTION_CANCEL を使用します。
  • 以降のすべてのイベントは、このビューの onTouchEvent メソッドに配信され、onInterceptTouchEvent には表示されなくなります。

したがって、オプション 1) onInterceptTouchEvent() 内でイベントを処理し、それらをターゲット ビューに転送する場合はオプション 2) を使用し、すべてのイベント フローを引き継いでターゲット ビューを切り離し、すべてのイベントを処理する場合は、オプション 2) を使用します。親のビュー onTouchEvent() 内で、元のターゲットであるかのように。

オプション1)をテストしましたが、うまくいきました。

于 2012-02-05T00:46:48.167 に答える
0

私はあなたと同じ問題を抱えていました。それがうまくいくかどうかはわかりませんが、カスタム ViewGroup の子を「true」に設定することで解決しました。

于 2011-01-04T01:32:48.770 に答える
0

これは、子供がクリック可能でない場合、タッチ イベントを受け入れないことを意味するためです。この時点で、ビューグループもタッチ イベントを受け入れない場合、Android ビュー システムはビューグループを考慮せず、その子孫をタッチ イベント ターゲットと見なすため、Android ビュー システムはタッチ イベントをビューグループの親に引き渡します。(nonclickable は textview が touchevent を受け入れないことを意味します)

于 2011-09-18T14:22:34.960 に答える