22
私はカスタムTextView
を実装していますので、ビューに触れたときに何らかのアクションを行いたいと思います。私はonTouchEvent
メソッドは、setOnTouchListener
(私はすべての仕事をビューの中ではなく、アクティビティの中で実行しようとしているので移植性があります)を使わなくても、ビューの全範囲をタッチすることができると考えましたが、登録された唯一のタッチイベントACTION_DOWN
です。これを使用してアクティビティにOnTouchListener
を設定すると、タッチイベントの全範囲が取得されますが、onTouchEvent
は表示されません。View.onTouchEventはACTION_DOWNイベントのみを登録します
これはなぜですか、誰でも私にはsetOnTouchListener
を使用しない解決策を提示できます(これは、実装アクティビティがそれ自身のリスナーを設定するのを妨げるでしょう)。
これを行うと、アクティビティから適用されたタッチ/クリックリスナーがトリガーされることはありません。私は機能を無効にしたくありません。私はちょうど彼らが発送される前にすべての接触を傍受したいが、それでもそれらを発送する。 'dispatchTouchEvent'を呼び出すと' onTouchEvent'が再び呼び出され、スタックオーバーフロー(lol)が発生します。 –
ViewGroupコンテナの場合は、onInterceptTouchEvent()をオーバーライドして、子供に送信されているタッチイベントを監視できます。それ以外に(または直接dispatchTouchEventへの接続 - 推奨されない)、あなたが望むことはできません。 MotionEventのディスパッチは、trueを返す最初の受信者を介してターゲットを見つけ出し、そのターゲットにすべての次のイベントをディスパッチすることに基づいています。 – hackbod
十分です。私が知っておくべきことは、実装クラスが完全に機能するタッチリスナを持つことを許さないカスタムビューにタッチリスナーを持たせる方法ですが、タイトルの質問には間違いなく答えました。 –