Android在RelativeLayout中左右滑动

Android在RelativeLayout中左右滑动,android,swipe,ontouchlistener,android-relativelayout,Android,Swipe,Ontouchlistener,Android Relativelayout,我正在尝试在我的RelativeLayout中实现向左或向右滑动。我写了一些代码,但无法让左扫或右扫工作。我正在使用手势检测器 这是我的消息来源 private GestureDetector gesturedetector = null; private RelativeLayout swipelayout; @SuppressLint("UseValueOf") @Override public View onCreateView(LayoutInflater inflater, View

我正在尝试在我的RelativeLayout中实现向左或向右滑动。我写了一些代码,但无法让左扫或右扫工作。我正在使用手势检测器 这是我的消息来源

private GestureDetector gesturedetector = null;
private RelativeLayout swipelayout;

@SuppressLint("UseValueOf")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.strada_menu_result_loadmore,
            container, false);


    swipelayout = (RelativeLayout) rootView.findViewById(R.id.swipelayout);

    gesturedetector = new GestureDetector(new MyGestureListener());
    swipelayout.setOnTouchListener(new OnTouchListener() {

        @Override

        public boolean onTouch(View v, MotionEvent event) {

        gesturedetector.onTouchEvent(event);

        return true;

        }

        });




    return rootView;

}


public boolean dispatchTouchEvent(MotionEvent 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_THRESHOLD_VELOCITY
                && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY &&

                Math.abs(dX) >= SWIPE_MIN_DISTANCE) {

            if (dX > 0) {

                Toast.makeText(getActivity(), "Right Swipe",
                        Toast.LENGTH_SHORT).show();

            } else {

                Toast.makeText(getActivity(), "Left Swipe",
                        Toast.LENGTH_SHORT).show();

            }

            return true;

        }
        return false;

    }
}
我做错了什么?如果有人知道答案,请帮助我
谢谢你试试这会对你有帮助的

OnSwipeTouchListener.java:

用法:

imageView.setOnTouchListener(new OnSwipeTouchListener() {
    public void onSwipeTop() {
        Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeRight() {
        Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeLeft() {
        Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
    }
    public void onSwipeBottom() {
        Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
    }

public boolean onTouch(View v, MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}
});

你只需要一个听众,这应该是所有简单的答案。看一看。 我在一些工作项目中使用了这段代码,所以一切都应该正常工作。但是如果有什么东西不见了或者不起作用,请告诉我

yourRelativeLayout.setOnTouchListener(new OnTouchListener() {

    int downX, upX;

     @Override
     public boolean onTouch(View v, MotionEvent event) {

         if (event.getAction() == MotionEvent.ACTION_DOWN) {
             downX = (int) event.getX(); 
             Log.i("event.getX()", " downX " + downX);
             return true;
         } 

         else if (event.getAction() == MotionEvent.ACTION_UP) {
             upX = (int) event.getX(); 
             Log.i("event.getX()", " upX " + upX);
             if (upX - downX > 100) {

                 // swipe right
             } 

             else if (downX - upX > -100) {

                 // swipe left
             }
             return true;

             }
             return false;
         }
     });

我建议您使用ViewPager进行刷卡。@Code学徒我想他只是想检测刷卡,而不是翻阅片段。否则他为什么要使用
手势检测器
?是的,我只想检测刷卡的片段,那么帮我们解决一下。你想干什么?您的代码到底做了哪些您不想要的事情?此处提供了与您给出的答案相同的答案:。您可以通过链接提出解决方案,或者对其进行改进,做出更好的解释。我在setOnTouchListener方法中有syntacs错误。先生,您可以更改代码吗?@yashwanth我现在如何编写setOnTouchListener方法?这是错误的答案,先生。我不能刷我的布局我会编辑答案…现在试试这个答案你们这些家伙,我相信它现在正在工作…它不仅适用于左,但也适用于'向上'如何限制'向上'?这代码在那里不照顾Y坐标。它的基本功能是,当您第一次触摸屏幕时获取X坐标(downX),当您松开手指时再次获取X坐标(upX)。然后比较这两个值以了解手指移动的方向。要阻止“向上”(意思是+Y方向),需要添加downY和upY值,就像上面的X一样。然后你可以比较这两个值,如果你不考虑这个动作,就返回false。你也可以把阈值从100改为更大的值。然后你可以忽略小的X方向变化,当你向下向上移动你的手指时。它应该是:if(upX-downX>100*常数.密度){}否则如果(downX-upX>100*常数.密度){}U我们改变了upX-downX的顺序,并且将-添加到100,这是不正确的。对吗?我的意思是,我从100中取出-,它现在可以正常工作了,不需要Y坐标,也不需要在我做的任何事情上向左滑动,上面的代码可以找到X坐标的差异。在触摸屏幕和释放屏幕时的两种状态之间,
向下
向上
。100是X坐标中的最小变化。如果差值小于100 in X,则不会检测到手势。
yourRelativeLayout.setOnTouchListener(new OnTouchListener() {

    int downX, upX;

     @Override
     public boolean onTouch(View v, MotionEvent event) {

         if (event.getAction() == MotionEvent.ACTION_DOWN) {
             downX = (int) event.getX(); 
             Log.i("event.getX()", " downX " + downX);
             return true;
         } 

         else if (event.getAction() == MotionEvent.ACTION_UP) {
             upX = (int) event.getX(); 
             Log.i("event.getX()", " upX " + upX);
             if (upX - downX > 100) {

                 // swipe right
             } 

             else if (downX - upX > -100) {

                 // swipe left
             }
             return true;

             }
             return false;
         }
     });