1

一度に 3 つのボタンをタッチできるようにして、別のボタンから指を離さずにボタンをタッチできるようにしたいと考えています。これまでのところ、ACTION_DOWN、ACTION_POINTER_1_DOWN、および ACTION_POINTER_2_DOWN をこの順序で使用しました。

      public boolean onTouch(final View v, final MotionEvent event) {


            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                {   playSound(SOUND1,  1.0f) ;};
                    break;
                case R.id.button2:
                {   playSound(SOUND2,  1.0f) ;};
                    break;
                case R.id.button3:
                {   playSound(SOUND3,  1.0f) ;};
                    break;}

            } else if (event.getAction() == MotionEvent.ACTION_POINTER_1_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                {   playSound(SOUND1,  1.0f) ;};
                    break;
                case R.id.button2:
                {   playSound(SOUND2,  1.0f) ;};
                    break;
                case R.id.button3:
                {   playSound(SOUND3,  1.0f) ;};

                    break;}

            } else if (event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN) {
                switch (v.getId()) {
                case R.id.button1:
                {   playSound(SOUND1,  1.0f) ;};

                    break;
                case R.id.button2:
                {   playSound(SOUND2,  1.0f) ;};

                    break;
                case R.id.button3:
                {   playSound(SOUND3,  1.0f) ;};
                    break;}

このプロジェクトを自分の携帯電話でコンパイルして実行しても、エラーや警告は発生しません。

しかし、2回目にタッチすると、1回目と同じ音が鳴ります。例: 指 2 がボタン 2 を押します (sound2 の再生中)。ボタン 2 を指 2 で押さえたまま、指 3 でボタン 3 をタッチします。

「return true」を試してみましたが、何も変わりませんでした。

少数の人々もこの問題を抱えていますが、これらのスレッドで実際に解決策を見つける人はいません.

アレックス

更新: どこをクリックしても問題ないことがわかりました。空白をクリックしても、もう一方の指がオンになっているボタンが再び反応します

4

1 に答える 1

1

使用しているコードが廃止されていることに気付きました。次のコード (Android トレーニング ドキュメントから取得した、リンク先を参照) が問題の解決に役立つと思います。

http://developer.android.com/training/gestures/multi.html

private int mActivePointerId;

public boolean onTouchEvent(MotionEvent event) 
{
    ....
    // Get the pointer ID
    mActivePointerId = event.getPointerId(0);

    // ... Many touch events later...

    // Use the pointer ID to find the index of the active pointer 
    // and fetch its position
    int pointerIndex = event.findPointerIndex(mActivePointerId);
    // Get the pointer's current position
    float x = event.getX(pointerIndex);
    float y = event.getY(pointerIndex);
}

次に、x、y 座標を使用して、押しているボタンを特定し、サウンドを有効にすることができます。

于 2013-04-10T16:23:39.683 に答える