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

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

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

  

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGNxNTIxMTMxNDEyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="402" width="254" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGNxNTIxMTMxNDEyMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="402" width="278" >

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

}
时间: 2024-12-30 12:39:49

andorid自己定义ViewPager之——子ViewPager滑到边缘后直接滑动父ViewPager的相关文章

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

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

自定义循环滑动的viewpager

今天和大家分享一下如何定制一个可以循环滑动的viewpager.其实今天更重要的提供一种组件化思想,当然你可以理解为面向对象思想. 吐槽一下网上流行的实现方式吧(为了方便说明,下文称之为方式A),方式A是重写adapter的getCount方法,返回一个很大的数(值为max),adapter中的getView方法中的position重新根据实际数量取模,把viewpager设置在max二分之一的位置.因为这个值很大所以基本不可能滑动到position=0或者position=max的位置,不过确

android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点

1.先上图后说话 2.代码 package com.example.exmp; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import and

禁止滑动的ViewPager

禁止滑动的ViewPager ViewPager非常好用,但有时候需要在ViewPager的里面再嵌入ViewPager,那么就有冲突了,简单粗暴的方法就是直接把一个ViewPager禁止滑动. 注意:禁止滑动的同时不能禁止 setCurrentItem 方法. 实现思路:重写ViewPager,覆盖 onTouchEvent 和 onInterceptTouchEvent 方法,使其返回false,这样就等于禁止了ViewPager上的滑动事件. [ 参考文章 ] 代码 package com

自己定义ViewpagerIndicator (仿猫眼,加入边缘回弹滚动效果)

一.概述 今天主要来分享个自己定义viewpagerindicator.效果主要是仿 猫眼电影 顶部的栏目切换.也就是我们常说的indicator,难度简单,为了让滑动时效果更炫酷,我在滑动到左边第一个item或者最右边的item时,加入了滑动到边缘位置后,回弹然后复位的效果(事实上也是非常easy,仅仅要计算好距离就好啦) 大致的效果图就是这样. 大家能够凑合看看(能够看到当滑动到边缘位置的时候有回弹的效果,是不是挺带感的O(∩_∩)O) 二.用法 layout布局 <LinearLayout

[转]MFC子线程更改图像数据后更新主窗口图像显示方法

程序思路是由外部的输入输出控制卡发出采集图像信号,之后相机采集图像得到图像数据指针,接收图像数据指针创建成图像最后显示到MFC对话框应用程序的Picture Control控件上,同时,为了标定相机位置,在主对话框类CMyDlg的OnPaint函数中有对Picture Control的绘图操作(不改变图像数据,进行画线,画矩形等操作). 设计时考虑到I/O卡何时发出采集信号或者相机何时得到图像数据指针是不确定的(不使用OnTime),同时考虑到I/O卡和相机的回调函数与主程序之间的数据交换会更加

ASPX 关闭子窗口后自动更新父窗口

Response.Write("<script language:javascript>javascript:window.close();</script>");//关闭窗口后不更新父窗口 Response.Write("<script> window.opener.location= 父窗口.aspx ';window.close(); </script>");//关闭窗口后自动更新父窗口 ASPX 关闭子窗口后自

Vue 父组件向子组件传值,传方法,传父组件整体

父子组件传值 1.父组件调用子组件时绑定属性,例如-> :title="title" 2.子组件中在props中声明title:props:['title','msg'] 3.就可以在子组件中引用title Tips:避免父子组件传值时命名冲突 父子组件传方法方式一样 1.父组件调用子组件时绑定属性,例如-> :run="run" 2.子组件中props中声明run:props:['title','msg','run'] 3.子组件中的button引用r

多线程 创建子父线程 保证一件事 子线程执行三次后 父线程执行5次 循环10次

package Thread; /** * 创建子父线程 保证一件事 子线程执行三次后 父线程执行5次 循环10次 * 父线程main线程则为Console台项目的主线程 * 在main线程中调用了start线程则为子线程 * */ public class FatherAndSonTest { public static void main(String[] args) { final FatherAndSon fs = new FatherAndSon(); new Thread(new R