你的位置:首页 > 软件开发 > 操作系统 > 如何禁止内部viewPager滑动

如何禁止内部viewPager滑动

发布时间:2016-10-06 23:00:09
众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*—……—*)。情况是这样的:activity中有一个viewPager,viewPager中加入3个Fragme ...

如何禁止内部viewPager滑动

众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*—……—*)。

情况是这样的:

activity中有一个viewPager,viewPager中加入3个Fragment,第三个Fragment中又使用了一个viewPager,这个viewPager中又加入了几个Fragment(本人不是受虐狂,仅仅是功能需要)。如图:

如何禁止内部viewPager滑动如何禁止内部viewPager滑动如何禁止内部viewPager滑动

想实现的功能:

点击activity的图标或者滑动的时候能够切换第一个viewPager中的Fragment,点击Fragment3中的图标能够切换第二个viewPager里的Fragment,但是禁止这个viewPager滑动第二个viewPager里的Fragment1里面有一个listView(有下拉刷新功能),要能够上下滑动不受影响。

关键就是禁止内部viewPager滑动,但是其它的功能不受影响。

呵呵,已经元气大伤......

探索过程已经不想吐槽。

 

这个问题涉及到事件的分发机制,需要重写viewPager。那么到底该重写哪个viewPager呢?

首先分析一下这个问题的解决过程:

1.要禁止里面的viewPager左右滑动,那么即是说当我们左右滑动的时候,外面的viewPager要拦截事件,当我们上下滑动的时候外面的viewPager不能拦截事件,这样事件才能传递到内部的viewPager,内部viewPager里的fragment包含的listView才能上下滑动。

2.当然点击事件也不能够拦截,这样点击Fragment3的图标才能切换内部viewPager里面的Fragment。

3.由于内部viewPager在Fragment3,所以我们在外部的viewPager切换到item3的时候再做1,2步的处理。

 

在这里重写外部viewPager会比较方便,即我们用外部拦截法。

接下来请看外部拦截神功。

import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import neo.door.usermanager.UserManager;public class MyViewPager extends ViewPager {  private int mFirstX =0,mFirstY=0;  private String TAG = "MyViewPager";  public MyViewPager(Context context, AttributeSet attrs) {    super(context, attrs);  }  @Override  public boolean onInterceptTouchEvent(MotionEvent event) {    if(this.getCurrentItem()==2) //如果滑动到了第三个Fragment    {      boolean isIntercept=false;      int x=(int) event.getX();      int y=(int) event.getY();      Log.e(TAG, "onInterceptTouchEvent");      switch (event.getAction()) {

原标题:如何禁止内部viewPager滑动

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。