Motionevent ACTION_MOVE保持击发X和Y即使不移动 [英] Motionevent Action_MOVE keeps firing X and Y even if not moved

查看:224
本文介绍了Motionevent ACTION_MOVE保持击发X和Y即使不移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试简单的程序,有一个基于移动如果声音。所以一开始我有下降 - 这播放声音1,从此一举一动都被不断播放声音。在计数4我已到从头播放。

这里的问题是:当我不动了我的手指,并保持在同一个地方的声音仍然保持1:1 - 想通了x和y的值射击。如何停止这个?

  OnTouchListener MyOnTouchListener =新OnTouchListener()
{
公共布尔onTouch(查看视图,MotionEvent事件)
    {
    开关(event.getAction()及MotionEvent.ACTION_MASK)
        {         案例MotionEvent.ACTION_DOWN:
           X =(int)的event.getX();
            Y =(INT)event.getY();
            OLDVAL = X + Y;
            打破;    案例MotionEvent.ACTION_MOVE:
        {
          Log.e(X值,X为+ X);
          Log.e(Y值,Y是+ y)的;
        尝试
            {
                视频下载(500);
            }赶上(InterruptedException的E){
            }            INT的newval =(int)的(event.getX()+ event.getY());            如果(Math.abs(OLDVAL-的newval)→50)
            {                Log.e(第一,下一个按钮);
                长pressCount ++;
                如果(长pressCount == 1)
                {
                   Log.e(1,按钮preSSED);
                }
                否则,如果(长pressCount == 2)
                {
                    Log.e(2,按钮preSSED);
                }
                否则,如果(长pressCount == 3)
                {
                    Log.e(3,按钮preSSED);
                }
                否则,如果(长pressCount == 4)
                {
                    Log.e(4,按钮preSSED);
                    长pressCount = 0;
                }            }            打破;
         }
        }
        返回true;
    }


解决方案

MOVE是非常敏感,并会继续,只要你的手指已经降到了被调用。如果搬离那个地方还有50距离在声音播放code所以它只会起到年底将旧值。

这样的事情。

  OnTouchListener MyOnTouchListener =新OnTouchListener()
{
公共布尔onTouch(查看视图,MotionEvent事件)
    {
    开关(event.getAction()及MotionEvent.ACTION_MASK)
        {         案例MotionEvent.ACTION_DOWN:
           X =(int)的event.getX();
            Y =(INT)event.getY();
            OLDVAL = X + Y;
            打破;    案例MotionEvent.ACTION_MOVE:
        {
          Log.e(X值,X为+ X);
          Log.e(Y值,Y是+ y)的;
        尝试
            {
                视频下载(500);
            }赶上(InterruptedException的E){
            }            INT的newval =(int)的(event.getX()+ event.getY());            如果(Math.abs(OLDVAL-的newval)→50)
            {                Log.e(第一,下一个按钮);
                长pressCount ++;
                如果(长pressCount == 1)
                {
                   Log.e(1,按钮preSSED);
                }
                否则,如果(长pressCount == 2)
                {
                    Log.e(2,按钮preSSED);
                }
                否则,如果(长pressCount == 3)
                {
                    Log.e(3,按钮preSSED);
                }
                否则,如果(长pressCount == 4)
                {
                    Log.e(4,按钮preSSED);
                    长pressCount = 0;
                }
                OLDVAL = event.getX()+ event.getY();
            }            打破;
         }
        }
        返回true;
    }

I am trying out simple program that have sounds based if moved. so at the beginning I have down - which play sound 1 and from then every move it is keeps playing a sound. At count 4 I have made it to play from start.

here is the problem: When I don't move my finger and hold it in the same place the sound still keeps 1 by 1 - Figured out the x and y value firing. How do I stop this??

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 is very sensitive and will continue to be called as long as your finger is down. Set Old Value at the end of the sound playing code so it will only play if moved another 50 distance from that spot.

Something like this.

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;
    }

这篇关于Motionevent ACTION_MOVE保持击发X和Y即使不移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆