2013-03-02 141 views
5

我用libgdx在屏幕中央顯示了一個圖像。如果我向左滑動,圖像應該左移,如果我刷右圖像應該右移Android libgdx使用手勢監聽器輕掃左右檢測

後續向左滑動應向左移動圖像。同樣的情況也會發生。我用GestureListener

它在某種程度上在某種程度上起作用,如果我向左滑動左移第一個圖像。但之後,如果我嘗試向右滑動,圖像仍然向左移動。

那麼我如何克服這個在libgdx?

class MyGestureListener implements GestureListener { 

     @Override 
     public boolean fling(float arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 


       if(arg0>0) 
       iX += 20; 
       else 
      // else if(arg0*100>iX) 
        iX-=20; 
       System.out.println("Hello..............."+iX); 
      return true; 
     } 

    Gdx.input.setInputProcessor(new GestureDetector(0.0f, 0.0f,0.0f, 5f,new MyGestureListener())); 

    batch.draw(splashTexture, iX, iY); 
+0

您可以發佈您的代碼段... – 2013-03-02 17:26:44

+0

你可以讓你從[這個老帖] [1] [1]回答:http://stackoverflow.com/questions/937313/android-basic-gesture-detection – 2013-03-02 17:31:26

+0

這是否適用於libgdx? – Raghunandan 2013-03-02 17:33:00

回答

4

我在這個鏈接中使用了示例。 https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/GestureDetectorTest.java

@Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     if(Math.abs(velocityX)>Math.abs(velocityY)){ 
       if(velocityX>0){ 
         iX+=20;//x cordinate 
       }else if (velocityX<0){ 
         iX-=20; 
       } else { 
       // Do nothing. 
       } 
     }else{ 

      // Ignore the input, because we don't care about up/down swipes. 
     } 
return true; 
} 
+5

爲什麼這是低調? – Raghunandan 2014-05-31 07:04:57

0
public class Test extends Activity{ 

private GestureDetector gesturedetector = null; 

View layout; 

@Override 

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.test); 

layout = (LinearLayout)findViewById(R.id.container); 

gesturedetector = new GestureDetector(new MyGestureListener()); 

layout.setOnTouchListener(new OnTouchListener() { 

@Override 

public boolean onTouch(View v, MotionEvent event) { 

gesturedetector.onTouchEvent(event); 

return true; 

} 

}); 

} 

public boolean dispatchTouchEvent(MotionEvent ev){ 

super.dispatchTouchEvent(ev); 

return gesturedetector.onTouchEvent(ev); 

} 

class MyGestureListener extends GestureDetector.SimpleOnGestureListener{ 

private static final int SWIPE_MIN_DISTANCE = 150; 

private static final int SWIPE_MAX_OFF_PATH = 100; 

private static final int SWIPE_THRESHOLD_VELOCITY = 100; 

@Override 

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 

float velocityY) { 

float dX = e2.getX()-e1.getX(); 

float dY = e1.getY()-e2.getY(); 

if (Math.abs(dY)<SWIPE_MAX_OFF_PATH && 

Math.abs(velocityX)>=SWIPE_THRESHOLD_VELOCITY && 

Math.abs(dX)>=SWIPE_MIN_DISTANCE) { 

if (dX>0) { 

Toast.makeText(getApplicationContext(), 「Right Swipe」, Toast.LENGTH_SHORT).show(); 

} else { 

Toast.makeText(getApplicationContext(), 「Left Swipe」, Toast.LENGTH_SHORT).show(); 

} 

return true; 

} else if (Math.abs(dX)<SWIPE_MAX_OFF_PATH && 

Math.abs(velocityY)>=SWIPE_THRESHOLD_VELOCITY && 

Math.abs(dY)>=SWIPE_MIN_DISTANCE) { 

if (dY>0) { 

Toast.makeText(getApplicationContext(), 「Up Swipe」, Toast.LENGTH_SHORT).show(); 

} else { 

Toast.makeText(getApplicationContext(), 「Down Swipe」, Toast.LENGTH_SHORT).show(); 

} 

return true; 

} 

return false; 

} 

} 

} 
+0

這個答案適用於vanilla Android,不適用於Libgdx。它也沒有做任何原始問題沒有做的事情。 – 2014-06-19 06:02:17

+0

沒有解釋只是代碼。你能否解釋你做了什麼代碼工作並解決了問題 – 2014-06-19 06:33:33