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 按下按钮 2(声音 2 播放)。在按钮 2 上按住手指 2 时,我用手指 3 触摸按钮 3。我预计,声音 3 正在播放,但声音 2 再次播放。

我已经尝试过“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 回答