码迷,mamicode.com
首页 > 其他好文 > 详细

andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager

时间:2014-11-19 01:59:25      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:android   应用开发   源码   viewpager   

  最近的项目中,有一个需求要用ViewPager中嵌套ViewPager去实现整个效果,没做任何处理做出来后,只能不停的滑动子ViewPager,父ViewPager就无法滑动了,这样肯定是不满足的,分析了一下原因,很显示是整个滑动事件都被子ViewPager消耗掉了,所以只能对ViewPager做一下自定义处理,才可以实现。以下是这个需求实现后的效果图:

  bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

  从图上就可以看出:我们用ViewPager中嵌套了ViewPager,而且要实现的是子ViewPager滑动到最后一页时,再滑就是滑动父ViewPager.下面将自定义的ViewPager代码贴出来,大家可以参考下。

  

/**********************************************************
 * @文件名称:MyViewPager.java
 * @创建时间:2014年11月18日 下午4:24:25
 * @修改历史:2014年11月18日创建初始版本
 **********************************************************/
public class MyViewPager extends ViewPager
{
        //父ViewPager的引用
        private ViewPager viewPager;
	private boolean flag = true;
	private float mLastMotionX;

	public BookstoreViewPager(Context context)
	{
		super(context);
	}

	public BookstoreViewPager(Context context, AttributeSet attrs)
	{
		super(context, attrs);
	}

	public ViewPager getViewPager()
	{
		return viewPager;
	}
    //处理前必须调用此方法初始化冲突ViewPager
	public void setViewPager(ViewPager viewPager)
	{
		this.viewPager = viewPager;
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev)
	{
		final float x = ev.getX();
		switch (ev.getAction())
		{
		case MotionEvent.ACTION_DOWN:
			// 使父控件不处理任何触摸事件
			viewPager.requestDisallowInterceptTouchEvent(true);
			flag = true;
			mLastMotionX = x;
			break;
		case MotionEvent.ACTION_MOVE:
			if (flag)
			{
				if (x - mLastMotionX > 5 && getCurrentItem() == 0)
				{
					flag = false;
                                        viewPager.requestDisallowInterceptTouchEvent(false); //将事件交由父控件处理
				}

				if (x - mLastMotionX < -5 && getCurrentItem() == getAdapter().getCount() - 1)
				{
					flag = false;
					viewPager.requestDisallowInterceptTouchEvent(false);
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			viewPager.requestDisallowInterceptTouchEvent(false);
			break;
		case MotionEvent.ACTION_CANCEL:
			viewPager.requestDisallowInterceptTouchEvent(false);
			break;
		}
		return super.dispatchTouchEvent(ev);
	}

}


andorid自定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager

标签:android   应用开发   源码   viewpager   

原文地址:http://blog.csdn.net/lcq5211314123/article/details/41248569

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!