0

私は Android 開発に不慣れで、TouchListener (または任意のイベント リスナー) をボタンに追加して、その領域全体の動きに反応する方法があるかどうか疑問に思っていました。たとえば、画面の中央にボタンがあり、上からスワイプを開始すると、指がボタン領域に達すると反応するはずです。

これは私がそれを行うと思ったコードです

    private OnTouchListener tLis = new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        // Perform Action
        Button b = (Button) findViewById(R.id.button1);
        b.setText("Touched");
        return false;
    }

    };

助けてくれてありがとう!

4

1 に答える 1

3

残念だけど違う。タッチ イベントは、最初のタッチ イベント (つまり ACTION_DOWN) がそのビューの境界内にあることが判明した場合にのみ、親によって子ビューに配信されます。ビューに ACTION_DOWN が表示されない場合、そのジェスチャの後続のタッチ イベントは表示されません。

不可能だと言っているわけではありませんが、ボタンにリスナーを設定するだけでなく、より多くの作業が必要です。画面領域を埋めるカスタムを作成し、ViewGroup受信したすべてのタッチ イベントを監視して、最初のダウン イベントがそこで発生したかどうかに関係なく、境界内にあるときにそれらをボタンに配信する必要があります。

カスタムの親ビューの代替オプションは、dispatchTouchEvent()メソッドをオーバーライドし、Activityそこでタッチ イベントを監視することです。同じ原則ですが、指が境界内にあることを検出したときに、タッチイベントをボタンに手動で転送する必要があります。

イベントの転送は、渡したい をdispatchTouchEvent()使用してボタンのメソッドを直接呼び出すことによって行われます。転送する前に、異なる x/y 位置を持つように少しマッサージされる可能性があります。MotionEvent

いつものように、Android でカスタム タッチ コードを扱うときは、必要な場合を除き、作業中のメソッドの戻り値をオーバーライドしないようにしてください。これらの値は、アプリ内のタッチ イベントのレスポンダー チェーン全体を管理します。

于 2012-07-11T22:23:57.110 に答える