GestureDetector onScroll()问题(执行3次) [英] GestureDetector onScroll() issue (executed 3 times)

查看:328
本文介绍了GestureDetector onScroll()问题(执行3次)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个片段的code检测使用GestureDetector滚动手势。它的工作原理,但它检测到的滚动活动3次,而不是一次。

我怎样才能使它只检测一次?它记录了春联活动(log.i线)的3倍,并播放声音(mp.start)的3倍,而不是一次过....而且使我的应用程序强制关闭。

 公共布尔onScroll(MotionEvent E1,E2 MotionEvent,浮distanceX,浮distanceY){

        //取得x和Y坐标并将其记录为信息。
        浮X1 = e1.getX();
        浮Y1 = e1.getY();
        浮X2 = e2.getX();
        浮Y2 = e2.getY();
        Log.i(Scroll_Gesture,从滚动:(+ X1 +,+ Y1 +至+ 2 +,+ Y2 +));

        MP = MediaPlayer.create(这一点,R.raw.scroll_success);
        mp.start();

       //启动成功页面
        意向意图=新的意图(这一点,ScrollSuccess.class);
        startActivity(意向);
        返回false;
    }
 

解决方案

onScroll()将被多次调用。 多少次将被称为将取决于由用户所做的滚动动作。

如果你希望你的code块在每个滚动条动作的开始只运行一次,那么你就必须添加一个条件,如下的内容:

 浮动scrollstartX1,scrollStartY1;

   公共布尔onScroll(MotionEvent E1,E2 MotionEvent,浮distanceX,
           浮动distanceY){
    //取得x和Y坐标并将其记录为信息。
       如果(scrollstartX1!= e1.getX()|| scrollStartY1!= e1.getY()){
           scrollstartX1 = e1.getX();
           scrollStartY1 = e1.getY();
               // *********
           // code只运行一次的滚动动作...
               // *******
       }
           浮X2 = e2.getX();
           浮Y2 = e2.getY();
           Log.i(Scroll_Gesture,从滚动:(+ scrollstartX1 +,+ scrollStartY1 +来
                   + 2 +,+ Y2 +));

           MP = MediaPlayer.create(这一点,R.raw.scroll_success);
           mp.start();

           //启动成功页面
           意向意图=新的意图(这一点,ScrollSuccess.class);
           startActivity(意向);

       返回false;
   }
 

I have this snippet of code to detect a scroll gesture using GestureDetector. It works, except it detects the scroll activity 3 times instead of once.

How can I make it detect only once? It logs the scrolls activity (log.i line) 3 times, and plays the sound (mp.start) 3 times instead of once too.... Also causes my application to force close.

  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

        //get x and Y co-ordinates and log it as info. 
        float x1 = e1.getX();
        float y1 = e1.getY();
        float x2 = e2.getX();
        float y2 = e2.getY();       
        Log.i("Scroll_Gesture", "Scrolled from: (" + x1 + "," + y1 + " to " + x2 +"," + y2 + ")");

        mp = MediaPlayer.create(this, R.raw.scroll_success);        
        mp.start();

       //start success page
        Intent intent = new Intent(this, ScrollSuccess.class);
        startActivity(intent); 
        return false;
    }

解决方案

"onScroll()" will be called multiple times. How many times it will be called would depend on the scroll action done by the user.

If you want your code block to run only once at the beginning of each scroll action then you would have to add a condition, something as below:

   float scrollstartX1, scrollStartY1;

   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
           float distanceY) {
    // get x and Y co-ordinates and log it as info.
       if (scrollstartX1 != e1.getX() || scrollStartY1 != e1.getY()) {
           scrollstartX1 = e1.getX();
           scrollStartY1 = e1.getY();
               //***************************************
           //code run only once for a scroll action...
               //****************************************
       }
           float x2 = e2.getX();
           float y2 = e2.getY();
           Log.i("Scroll_Gesture", "Scrolled from: (" + scrollstartX1 + "," + scrollStartY1 + " to "
                   + x2 + "," + y2 + ")");

           mp = MediaPlayer.create(this, R.raw.scroll_success);
           mp.start();

           // start success page
           Intent intent = new Intent(this, ScrollSuccess.class);
           startActivity(intent);

       return false;
   }

这篇关于GestureDetector onScroll()问题(执行3次)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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