我用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 :(得分: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;
}
答案 1 :(得分: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;
}
}
}