多个ACTION_DOWN事件也是如此

时间:2013-04-10 15:52:39

标签: android button multi-touch

我希望一次可以触摸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正在播放,但声音2再次播放。

我已经尝试过“返回true”,但这并未改变任何内容。

有些人也有这个问题,但没有人真正在这些线程中找到解决方案。

亚历

更新:我刚发现我点击的地方并不重要。即使我点击一个空白区域,另一个手指所在的按钮也会再次作出反应

1 个答案:

答案 0 :(得分: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坐标来确定他们按下哪个按钮,并激活您的声音。