2013-03-02 9 views
5

Wyświetlam obraz na środku ekranu z libgdx. Jeśli przesuń palcem w lewo, obraz powinien się przesunąć , a jeśli przesuniemy w prawo, powinien on zostać przesunięty w prawo .Android libgdx przesuń palcem w lewo i w prawo, wykrywając gest słuchacza

Następne przesunięcia w lewo powinny przesunąć obraz w lewo. To samo powinno się zdarzyć dla dobra. Użyłem GestureListener.

Działa w pewnym sensie w tym sensie, że przesuwaj lewe pierwsze zdjęcie przesuwa się w lewo. Ale potem, jeśli spróbuję przesunąć w prawo, obraz nadal przesuwa się w lewo.

Jak mogę to rozwiązać w 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

można wysłać fragment kodu ... –

+0

można dostać się odpowiedzieć od [ten stary post] [1] [1]: http://stackoverflow.com/questions/937313/android-basic-gesture-detection –

+0

Czy to działa z libgdx ?? – Raghunandan

Odpowiedz

4

Użyłem przykładu w tym łączu. 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

Dlaczego jest to odrzucane? – Raghunandan

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

Ta odpowiedź dotyczy wanilii Androida, a nie Libgdx. Nie robi też niczego, czego pierwotne pytanie już nie robi. –

+0

brak wyjaśnień po prostu kod. Czy możesz wyjaśnić, w jaki sposób działa kod i rozwiązuje zadany problem –

Powiązane problemy