android - Motionevent Action_MOVE 即使没有移动也会继续发射 X 和 Y

标签 android motionevent

我正在尝试一个简单的程序,该程序在移动时会发出声音。所以一开始我很沮丧 - 它播放声音 1 并且从那时起它的每一个 Action 都一直在播放声音。在计数 4 时,我已经从头开始玩了。

这就是问题所在:当我不移动手指并将它放在同一个位置时,声音仍然保持 1 乘 1 - 计算出 x 和 y 值触发。我该如何阻止这个??

OnTouchListener MyOnTouchListener= new OnTouchListener()
{
public boolean onTouch(View view, MotionEvent event)
    {
    switch(event.getAction() & MotionEvent.ACTION_MASK)
        {

         case MotionEvent.ACTION_DOWN:
           x = (int) event.getX();
            y = (int) event.getY();    
            oldval = x+y;
            break;

    case MotionEvent.ACTION_MOVE:
        {
          Log.e("X value", "X is "+x);
          Log.e("Y value", "Y is "+y);
        try 
            {
                Thread.sleep(500);
            } catch (InterruptedException e) {
            }

            int newval= (int) (event.getX() + event.getY()); 

            if(Math.abs(oldval-newval)>50)
            {

                Log.e("First", "next button");
                longpressCount++;
                if(longpressCount==1)
                {
                   Log.e("1", "BUTTON PRESSED");
                }
                else if(longpressCount==2)
                {
                    Log.e("2", "BUTTON PRESSED");
                }
                else if(longpressCount==3)
                {
                    Log.e("3", "BUTTON PRESSED");
                }
                else if(longpressCount==4)
                {
                    Log.e("4", "BUTTON PRESSED");
                    longpressCount = 0;
                }

            }

            break;
         }
        }
        return true;
    }

最佳答案

MOVE非常灵敏,只要你的手指在下,就会一直调用。在声音播放代码的末尾设置旧值,这样它只会在距离该点再移动 50 距离时播放。

像这样。

OnTouchListener MyOnTouchListener= new OnTouchListener()
{
public boolean onTouch(View view, MotionEvent event)
    {
    switch(event.getAction() & MotionEvent.ACTION_MASK)
        {

         case MotionEvent.ACTION_DOWN:
           x = (int) event.getX();
            y = (int) event.getY();    
            oldval = x+y;
            break;

    case MotionEvent.ACTION_MOVE:
        {
          Log.e("X value", "X is "+x);
          Log.e("Y value", "Y is "+y);
        try 
            {
                Thread.sleep(500);
            } catch (InterruptedException e) {
            }

            int newval= (int) (event.getX() + event.getY()); 

            if(Math.abs(oldval-newval)>50)
            {

                Log.e("First", "next button");
                longpressCount++;
                if(longpressCount==1)
                {
                   Log.e("1", "BUTTON PRESSED");
                }
                else if(longpressCount==2)
                {
                    Log.e("2", "BUTTON PRESSED");
                }
                else if(longpressCount==3)
                {
                    Log.e("3", "BUTTON PRESSED");
                }
                else if(longpressCount==4)
                {
                    Log.e("4", "BUTTON PRESSED");
                    longpressCount = 0;
                }
                oldval = event.getX() + event.getY();
            }

            break;
         }
        }
        return true;
    }

关于android - Motionevent Action_MOVE 即使没有移动也会继续发射 X 和 Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328867/

相关文章:

Android手指检测-方向和椭圆

java - ListView 和全局变量

android - 如何以编程方式隐藏按钮?

android - 如何膨胀自定义 View 类?

java - 如果MotionEvent超时90秒怎么调用方法?

android - 使用 MotionEvent.getAction() 方法的区别

java - Android ACTION_UP 在 ACTION_MOVE 之后不会被触发

java - 将 RGB 转换为位图中的 X 和 Y

android - 崩溃初始化 std::String

android - FingerprintManagerCompat 方法在三星设备上有问题