android - 多个 ACTION_DOWN 事件做同样的事情

标签 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。我预计声音 3 正在播放,但声音 2 再次播放。

我已经尝试过“return true”,但这并没有改变任何东西。

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

亚历克斯

更新:我刚刚发现点击哪里并不重要。即使我点击空白处,另一根手指所在的按钮也会再次使用react

最佳答案

我注意到您使用的代码已被弃用。我相信以下代码(从 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 坐标来确定他们按下的是哪个按钮,并激活您的声音。

关于android - 多个 ACTION_DOWN 事件做同样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930653/

相关文章:

jquery - 使用 jQuery 在网页上拖动多个元素的可能性

html - 当您尝试放大时,CSS 滚动捕捉卡住

android - 在 AsyncTask 上调用 execute() 不会调用 doInBackground()

android - 将 Kotlin 文件编译为 Dex 会生成 ClassNotFoundException (kotlin.jvm.internal.Intrinsics)

java - 当我点击一个按钮时,我只想激活它周围的按钮。这怎么可能?

javascript - 为什么 Button 组件在单击时改变位置?

android - 在 Activity 中禁用或阻止多点触控

Java ArrayList Contains()方法不起作用

android - 如何在 Android 中创建这样的 3d 动画?

jquery - 单击按钮更改所选选项