zoukankan      html  css  js  c++  java
  • andorid自己定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager

      近期的项目中,有一个需求要用ViewPager中嵌套ViewPager去实现整个效果。没做不论什么处理做出来后,仅仅能不停的滑动子ViewPager,父ViewPager就无法滑动了,这样肯定是不满足的,分析了一下原因,非常显示是整个滑动事件都被子ViewPager消耗掉了,所以仅仅能对ViewPager做一下自己定义处理。才干够实现。

    下面是这个需求实现后的效果图:

      

      从图上就能够看出:我们用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);
    	}
    
    }
    


  • 相关阅读:
    POJ 1026 Cipher(置换群)
    POJ 1691 Painting A Board(DFS)
    URAL 1073 Square Country(DP)
    Spring Boot系列教程三:使用devtools实现热部署
    Spring Boot系列教程二:创建第一个web工程 hello world
    Spring Boot系列教程一:Eclipse安装spring-tool-suite插件
    java实现二叉树的构建以及3种遍历方法
    二叉树的java实现
    各种数据库的分页查询语句
    sql语句查询各门课程平均分的最大值
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7143171.html
Copyright © 2011-2022 走看看