明天还要加班,苦逼的程序猿,简单说说最近遇到的一个问题吧。

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

源码下载

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

android开发之定制ViewPager滑动事件的更多相关文章

  1. android开发学习之ViewPager滑动事件讲解

    android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...

  2. Android开发实战之ViewPager实现向导界面

    当我们更新应用,或者第一次进入应用时都会有一个向导界面,介绍这个app的内容和使用方式. 如果你细心你会发现其实这就是个viewpager,本篇博文将介绍应用的向导界面是如何制作的.希 望本篇博文对你 ...

  3. android ViewPager滑动事件讲解

    首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChan ...

  4. Android开发之利用ViewPager实现在Activity或Fragment中引入别的布局文件实现滑动并进行页面跳转

    有些时候经常可以看到其他APP中有一排的图标,可以在一个界面中滑来滑去,并且图标可以进行点击事件进行页面的跳转.这里对这种方法的实现做出总结. 首先看一下图片: 下面这两种图片是在一个Fragment ...

  5. Android开发实战之ViewPager的轮播

    在安卓开发的许多控件中,如果你没有使用过ViewPager,就不能算是一个安卓开发工程师,在本篇博文中,我会总结ViewPager的使用方法, 以及一些开发中的拓展.希望本篇博文对你的学习和工作有所帮 ...

  6. Android开发之利用ViewPager实现页面的切换(仿微信、QQ)

    这里利用ViewPager实现页面的滑动,下面直接上代码: 1.首先写一个Activity,然后将要滑动的Fragment镶嵌到写好的Activity中. Activity的布局文件:activity ...

  7. SwipeRefreshLayout与ViewPager滑动事件冲突解决

    问题描写叙述: 开发中发现,SwipeRefreshLayout的下拉刷新,与ViewPager开发的banner的左右滑动事件有一点冲突,导致banner的左右滑动不够顺畅. 非常easy在bann ...

  8. Android开发UI之ViewPager及PagerAdapter

    ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...

  9. Android 解决Gallery下ScrollView滑动事件冲突

    在Gallery下,里面内容过长超出屏幕,这时我们可以用ScrollView来滚动,但是这样做了以后,会发现一个问题,Gallery的滑动事件和ScrollView的滑动事件起冲突,这时我们可以自定义 ...

随机推荐

  1. 在HTML下,如何为多个选择框提取数据并序列化

    如果同时存在选择框及下拉框,如果用JQUERY获取相关数据呢? <form id="deploy-form"> <checkbox>多选框 <sele ...

  2. 【GDOI 2011 DAY2 T3】零什么的最讨厌了 (快速求阶乘、中国剩余定理)

    问题描述: 林记在做数学习题的时候,经常遇到这种情况:苦思冥想了很久终于把问题解出来,结果发现答案是0,久而久之林记在得到习题答案是0的时候就没有了做出一道难题的成就感.于是林记决定:以后出题,答案一 ...

  3. 运行所选代码生成器时出错:无效指针(异常来自HRESULT:0x80004003(E_POINTER))

    这个是在使用了VS2015 update1学MVC的时候,在controllers的方法添加view时报的一个错误,中文基本搜不到解决方法,然后无奈转到成英文,还好G家的搜索提示补全能力拯救了我的渣英 ...

  4. android 双向滑动 seekbar

    实现原理: 1.自定义View,在onDraw(Canvas canvas)中,画出2个Drawable滑动块,2个Drawable滑动条,2个Paint(text) 2.监听onTouchEvent ...

  5. 在android4.0中实现View的拖动效果

    实现方法: 首先需要定义一个支持拖动的源组件和一个作为Drop区域的目标组件. 在支持拖动的组件中注册OnTouchListener 或LongClickListener监听事件,构建一个ClipDa ...

  6. DIV 清除样式浮动万能代码

            .talk {             width: 100%;             margin: 10px 0;         }         .talk:after { ...

  7. C#功能扩张方式

    有时候,为了完成一些window的一些操作,需要引入一些dll进行操作 1)  引入系统api进行操作,形如[DllImport("urlmon.dll", CharSet = C ...

  8. 【Android 复习】:第01期:引导界面(一)ViewPager介绍和使用详解

    一.ViewPager实现的效果图 二.ViewPager实现的功能 看到上面的效果图,想必大家已经猜出了这个类是干吗用的了,ViewPager类提供了多界面切换的新效果, 新效果有如下特征: < ...

  9. Linux下Chrome浏览器的BUG

    “我胡汉三又回来了”,好久没出现在博客园了,准备考试什么的最烦躁了,今天又重新整了下我的Ubuntu,结果发现了一个Chrome浏览器的Bug,但是与其说它是个Bug,还不如说它是个Joke. 好吧, ...

  10. What is happening in Crockford's object creation technique?

    What is happening in Crockford's object creation technique? http://stackoverflow.com/questions/27660 ...