GridView 实现左右分页滑动 (超级简单的方法)

最近项目在做日历签到板块 因为之前上学的时候敲过一个关于日历的Demo
所以直接用上了 用的就是GridView的实现 上一篇文章也解决了
有关GridView适配尺寸的问题 https://blog.csdn.net/Life_s/article/details/80509899

之前做的日历不能滑动,在当今的app中有那个日历是不能滑动的呀?那么问题来了,下面这个问题是解决了GridView 实现左右分页滑动的效果 因为我不会做Gif图 这里就直接说使用方法吧
问题肯定可以解决的 相信我!
蜜汁微笑

不废话了 直接上代码!
首先获取手势识别类

第一步

//获取手势识别监听
GestureDetector gesture_detector;

第二步

 //在onCreate的时候初始化该类和监听
 gesture_detector = new GestureDetector(this);
 mGridView.setLongClickable(true);//条件一
 mGridView.setOnTouchListener(this);//条件二
条件一 是使获取到屏幕的监听事件,如果没有这句的话就获取不到屏幕的监听事件
条件二 是因为在屏幕的左右滑动中OnTouchListener和OnGestureListener结合使用
所以在这个地方必须要有这句才能实现手势的识别。

第三步

  • 以下方法不分先后顺序
 @Override
    public boolean onDown(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }
    //自定义可以滑动的范围值和速率
    private static final int MaxWidth = 80;
    private static final int MaxSpeed = 200;

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2, 
    float velocityX, float velocityY) { 
         //可以判断左右手势,或者增加自己的手势判断
         //在这里增加相应的手势处理函数来完成相应的界面切换效果    
       if (event1.getX() - event2.getX() > MaxWidth && Math.abs(velocityX) > MaxSpeed) {
            //右滑
            nextMonth();
            return true;
        } else if (event2.getX() - event1.getX() > MaxWidth 
        && Math.abs(velocityX) > MaxSpeed) {
            //左滑
            lastMonth();
            return true;
         }
        return true;
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        return this.gesture_detector.onTouchEvent(event);
    }

滑动上月和下月的方法

private void lastMonth() {
        month--;
        //月份从0开始,-1上一年的最后一天
        if (month == -1) {
            year--;
            month = 11;
        }
        setDate();
        calc();
    }

    private void nextMonth() {
        month++;
        if (month == 12) {
            year++;
            month = 0;
        }
        setDate();
        calc();
    }

反正图也不能滑 就看下图吧:
可滑动的GridView

猜你喜欢

转载自blog.csdn.net/life_s/article/details/80511237