Android在RelativeLayout中左右滑动

标签 android swipe ontouchlistener android-relativelayout

我正在尝试在我的 RelativeLayout 中实现向左或向右滑动。我写了一些代码,但无法向左或向右滑动。我正在使用 GestureDetector 这是我的来源

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;

    }
}

我做错了什么?如果有人知道解决方案请帮助我 谢谢

最佳答案

你只需要一个 OnTouchListener,这应该是简单的答案。看一看。 我在一些工作项目中使用了这段代码,所以一切都应该工作正常。但是,如果缺少某些内容并且不起作用,请告诉我。

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;
         }
     });

关于Android在RelativeLayout中左右滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827675/

相关文章:

Android:使用 onTouch 移动 View 有明显的滞后

java - 如何使用 setOnClickListener 和 setOnTouchListener +

android - FireBase 身份验证登录/注册异常

Android Studio 显示 Firebase 的空白文档

android - 使用 XML 的特定于平板电脑的 ImageView 宽度/高度/等值?

android - 具有背景颜色和文本的回收器 View 滑动不在滑动时显示矩形

Android MediaMuxer 将表面附加到编解码器输入

swift - 仅当 View Controller 通过滑动或后退按钮按下而不是通过切换选项卡从堆栈中弹出时才发送数据

ios - 弹出大图时如何左右滑动图片

java - 不会继续执行 ACTION_DOWN 上的语句