2011-06-17 12 views
22

私はカスタムTextViewを実装していますので、ビューに触れたときに何らかのアクションを行いたいと思います。私はonTouchEventメソッドは、setOnTouchListener(私はすべての仕事をビューの中ではなく、アクティビティの中で実行しようとしているので移植性があります)を使わなくても、ビューの全範囲をタッチすることができると考えましたが、登録された唯一のタッチイベントACTION_DOWNです。これを使用してアクティビティにOnTouchListenerを設定すると、タッチイベントの全範囲が取得されますが、onTouchEventは表示されません。View.onTouchEventはACTION_DOWNイベントのみを登録します

これはなぜですか、誰でも私にはsetOnTouchListenerを使用しない解決策を提示できます(これは、実装アクティビティがそれ自身のリスナーを設定するのを妨げるでしょう)。

答えて

55

ダウンした後に次のイベントを取得するには、trueを返す必要があります。

+1

これを行うと、アクティビティから適用されたタッチ/クリックリスナーがトリガーされることはありません。私は機能を無効にしたくありません。私はちょうど彼らが発送される前にすべての接触を傍受したいが、それでもそれらを発送する。 'dispatchTouchEvent'を呼び出すと' onTouchEvent'が再び呼び出され、スタックオーバーフロー(lol)が発生します。 –

+2

ViewGroupコンテナの場合は、onInterceptTouchEvent()をオーバーライドして、子供に送信されているタッチイベントを監視できます。それ以外に(または直接dispatchTouchEventへの接続 - 推奨されない)、あなたが望むことはできません。 MotionEventのディスパッチは、trueを返す最初の受信者を介してターゲットを見つけ出し、そのターゲットにすべての次のイベントをディスパッチすることに基づいています。 – hackbod

+0

十分です。私が知っておくべきことは、実装クラスが完全に機能するタッチリスナを持つことを許さないカスタムビューにタッチリスナーを持たせる方法ですが、タイトルの質問には間違いなく答えました。 –

関連する問題