2011-10-22 38 views
4

私はonClickハンドラを通して処理するボタンを持っています。onClickイベントとonTouchEventイベントを同時に処理する

しかし、ボタンのハイライトを処理できるように、onTouchEventイベントにも応答する必要があります。

問題は、私がonTouchEventハンドラから「false」を返すと、onClickハンドラが呼び出されますが、後続の「up」イベントに対してonTouchEventが返されないということです。

onTouchEventから「true」を返すと、「up」イベントが発生しますが、touchをonClickに送出することはありません。

私のオプションは何ですか?

  1. onTouchEvent内処理「をクリックし、」私自身を実装する - 私がボタン領域内と外の動きを追跡するために必要とされるであろうことを意味している、などの種類の複雑なようです。

  2. 私のボタンに単一の画像の代わりにセレクタを使用させ、異なる状態に異なる画像を割り当てることができます。私がこの問題を抱えているのは、セレクタがに変更するのが面倒だということです。私がする必要がある画像はです。私のアプリは異なる「モード」である場合には、異なる状態のボタン画像を変更します。もう一度(、これは過度に複雑そうです。

このすべてが

+0

これを正しく理解しているかどうかを見てみましょう。ボタンのデフォルトの強調表示を自分でオーバーライドしたいですか?もしそうなら、あなたはonTouch内の強調表示のすべてを行い、ACTION_UPを受け取ったときにbutton.performClick()を呼び出すことができますか? onclicklistenerが設定されている場合、performClickはボタンのonClickメソッドを呼び出します。 –

答えて

1

あなたは両方のクリックが必要な場合同じビューでイベントをタッチする場合は、GestureDetectorを使用します。そのリスナーのメソッドonShowPressを精通して調べる必要があります。

1
を???達成するための簡単な方法はありませんあなたの最善の策は、上記の、オプション2に由来しますよう

に思える。

私は複数にButtonStateListDrawableセレクタを作成し、その後、プログラムButton.setBackgroundResource()を使用してスタイルを切り替えることをお勧め。

+0

それは良い考えです。私が実際に行ったことは、画像を変更するたびにStateListSelector全体を書き直すことでした。しかし、onClickとonTouchEventsを同時に処理する方法については、質問を開いたままにしておきたいと思います。 – Brad