zoukankan      html  css  js  c++  java
  • 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事件,个中原因想到周日好好研究研究,明天还要加班,今天就说这么多吧。有问题欢迎讨论。

    源码下载

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

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/lenve/p/4770520.html
Copyright © 2011-2022 走看看