Android libgdx手势监听器实现左右滑动检测

5
我已在屏幕中央使用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);

你能分享你的代码片段吗? - Shridutt Kothari
你可以从这篇旧帖子中找到答案。 - Shridutt Kothari
这个能在libgdx中使用吗? - Raghunandan
不知道,但你可以试一试。 - Shridutt Kothari
2个回答

4

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

}

}

}

1
这个答案适用于原生Android,而不是Libgdx。它也没有做任何原问题没有做的事情。 - P.T.
1
不解释代码。您能否解释一下您所做的事情,代码如何工作并解决所提出的问题? - Illegal Argument

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接