• android开发之定制ViewPager滑动事件


    明天还要加班,苦逼的程序猿,简单说说最近遇到的一个问题吧。
    我在viewpager+fragment学习笔记中简单介绍过ViewPager+Fragment的用法,其实并不难,当时实现了一个如下图所示的效果:


    这里写图片描述


    然而,在实际开发中这一点技术可能根本不够用,项目中会有各种各样奇葩的需求,我最近就遇到了一个怪异的需求,捣鼓之后还是解决了,今天和大家聊聊。

    由于涉及到公司项目,我在这里就使用我自己制作的一个Demo来和大家介绍。
    我们要实现的效果如下图:


    这里写图片描述


    这里一共有三个Fragment,其中两个通过左右滑动显示,第三个要通过点击右上角的+来显示,在第三个Fragment上我们通过点击Fragment上的一个按钮再回到第一个Fragment上。其实这个要做非常简单,就是重写ViewPager的onTouch事件,在onTouch中判断当前的item,如果是1则取消向左滑动的动作。大致的一个思路就是这样。看代码:

    public class MyViewPager extends ViewPager {
    
        private int startX;
        private float currentX;
    
        public MyViewPager(Context context) {
            super(context);
        }
    
        public MyViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = (int) ev.getX();
                Log.i("lenve", "ACTION_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i("lenve", "ACTION_MOVE");
                currentX = ev.getX();
                break;
            case MotionEvent.ACTION_UP:
                Log.i("lenve", "ACTION_UP");
                break;
            }
            if (getCurrentItem() == 1 && currentX < startX) {
                return false;
            } else if (getCurrentItem() == 2) {
                return false;
            } else {
                return super.onTouchEvent(ev);
            }
        }
    }

    我在项目中是重写了onInterceptTouchEvent方法。但是这里重写onInterceptTouchEvent不管用,还是得重写onTouchEvent事件,个中原因想到周日好好研究研究,明天还要加班,今天就说这么多吧。有问题欢迎讨论。

    源码下载

    版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

  • 相关阅读:
    走向变态的人生
    HDWIKI 4.0.2绿色版(含运行环境)(V1)
    centos7 安装python3.7.1
    一种高并发流控程序的简单轻量实现
    编写JDBC框架优化CRUD操作
    一段阻塞队列代码的纠错与优化
    一次请求在同一个事务实现
    创建Java内部类的编译错误处理
    C++模板简单分析与举例
    java.lang.OutOfMemoryError处理错误
  • 原文地址:https://www.cnblogs.com/lenve/p/4770520.html
Copyright © 2020-2023  润新知