要点: 
1、重写组件public boolean onInterceptTouchEvent(MotionEvent event)方法 
2、正确使用requestDisallowInterceptTouchEvent(boolean flag)方法 
关于以上两个方法,请大家多看看相关介绍,这里就不在叙述了^_^

接下来上例子: 
1、外层ViewPager布局 (假定文件名为viewpager_layout.xml)

复制代码代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<android.support.v4.view.ViewPager 
android:id="@+id/viewpager" 
android:layout_width="fill_parent" 
android:layout_height="300dp" > 
</android.support.v4.view.ViewPager> 
</LinearLayout> 

2、里层ViewPager布局(假定文件名为child_viewpager_layout.xml)

复制代码代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:orientation="vertical" > 
<!--com.android.mylistview.view.MyLayout为自定义的布局,主要是为了重写public boolean onInterceptTouchEvent(MotionEvent event)方法--> 
<com.android.mylistview.view.MyLayout 
android:id="@+id/mylayout" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 
<android.support.v4.view.ViewPager 
android:id="@+id/child_viewpager" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_above="@+id/testtextview" > 
</android.support.v4.view.ViewPager> 
<TextView 
android:id="@+id/testtextview" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="10dp" 
android:background="#999999" 
android:padding="20dp" 
android:textColor="@android:color/black" /> 
</com.android.mylistview.view.MyLayout> 
</LinearLayout> 

3、child_viewpager每一页中的内容(假定文件名为child_viewpager_item.xml)

复制代码代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:orientation="vertical" > 
<RelativeLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 
<ImageView 
android:id="@+id/imageview" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true" 
android:background="@drawable/ic_launcher" /> 
<TextView 
android:id="@+id/textview" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" /> 
</RelativeLayout> 
</LinearLayout> 

4、以上为全部布局文件,接下来自定义MyLayout布局

复制代码代码如下:
public class MyLayout extends RelativeLayout 
{ 
ViewPager child_viewpager; 
float startX; 
/** 
* @param context 
* @param attrs 
*/ 
public MyLayout(Context context, AttributeSet attrs) 
{ 
super(context, attrs); 
} 
//这里是关键 
public boolean onInterceptTouchEvent(MotionEvent event) 
{ 
int action = event.getAction(); 
switch (action) 
{ 
case MotionEvent.ACTION_DOWN://按下 
startX = event.getX(); 
getParent().requestDisallowInterceptTouchEvent(true); 
break; 
//滑动,在此对里层viewpager的第一页和最后一页滑动做处理 
case MotionEvent.ACTION_MOVE: 
if (startX == event.getX()) 
{ 
if (0 == child_viewpager.getCurrentItem() 
|| child_viewpager.getCurrentItem() == child_viewpager 
.getAdapter().getCount() - 1) 
{ 
getParent().requestDisallowInterceptTouchEvent(false); 
} 
} 
//里层viewpager已经是最后一页,此时继续向右滑(手指从右往左滑) 
else if (startX > event.getX()) 
{ 
if (child_viewpager.getCurrentItem() == child_viewpager 
.getAdapter().getCount() - 1) 
{ 
getParent().requestDisallowInterceptTouchEvent(false); 
} 
} 
//里层viewpager已经是第一页,此时继续向左滑(手指从左往右滑) 
else if (startX < event.getX()) 
{ 
if (child_viewpager.getCurrentItem() == 0) 
{ 
getParent().requestDisallowInterceptTouchEvent(false); 
} 
} else 
{ 
getParent().requestDisallowInterceptTouchEvent(true); 
} 
break; 
case MotionEvent.ACTION_UP://抬起 
case MotionEvent.ACTION_CANCEL: 
getParent().requestDisallowInterceptTouchEvent(false); 
break; 
} 
return false; 
} 
//注入里层viewpager 
public void setChild_viewpager(ViewPager child_viewpager) 
{ 
this.child_viewpager = child_viewpager; 
} 
} 

5、最后是主activity

复制代码代码如下:
public class TestViewpager extends Activity 
{ 
private ViewPager viewpager; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.viewpager_layout); 
viewpager = (ViewPager) findViewById(R.id.viewpager); 
LayoutInflater inflater = LayoutInflater.from(this); 
List<View> list = new ArrayList<View>(); 
View view = null, childView = null; 
ViewPager child_viewpager; 
TextView textview, testtextview; 
List<View> childlist = null; 
MyLayout mylayout; 
for (int i = 0; i < 3; i++) 
{ 
view = inflater.inflate(R.layout.child_viewpager_layout, null); 
mylayout = (MyLayout) view.findViewById(R.id.mylayout); 
testtextview = (TextView) view.findViewById(R.id.testtextview); 
testtextview.setText("viewpager:" + i); 
list.add(view); 
child_viewpager = (ViewPager) view 
.findViewById(R.id.child_viewpager); 
//注入里层viewpager 
mylayout.setChild_viewpager(child_viewpager); 
childlist = new ArrayList<View>(); 
for (int j = 0; j < 3; j++) 
{ 
childView = inflater.inflate(R.layout.child_viewpager_item, 
null); 
textview = (TextView) childView.findViewById(R.id.textview); 
textview.setText("view" + i + ":" + j); 
childlist.add(childView); 
child_viewpager.setAdapter(new ViewPagerAdapter(childlist)); 
} 
} 
viewpager.setAdapter(new ViewPagerAdapter(list)); 
} 
} 
 
注:来自
 

仿网易新闻客户端头条ViewPager嵌套实例的更多相关文章

  1. 类似掌盟的Tab页 Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签 (转)

    原博客地址  :http://blog.csdn.net/xiaanming/article/details/10766053 本文转载,记录学习用,如有需要,请到原作者网站查看(上面这个网址) 之前 ...

  2. Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...

  3. Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...

  4. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10766053 之前用JakeWharton的开源框架ActionBarSherlock ...

  5. Android SlidingMenu 仿网易新闻客户端布局

    前面两篇文章中的SlidingMenu都出现在左侧,今天来模仿一下网易新闻客户端左右两边都有SlidingMenu的效果,以下是网易新闻客户端效果: 不扯闲话了,直接进入正题吧 frame_conte ...

  6. 分享一个仿网易新闻客户端iPhone版的标签式导航ViewController

    该Controller是一个容器,用于容纳其他的controller.效果与网易新闻客户端的标签式导航基本一样: (1)点击上面的标签,可以切换到对应的controller,标签下面的红色提示条的长度 ...

  7. Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...

  8. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻clientTab标签

    之前用JakeWharton的开源框架ActionBarSherlock和ViewPager实现了对网易新闻clientTab标签的功能,ActionBarSherlock是在3.0下面的机器支持Ac ...

  9. 仿Android网易新闻客户端,并增加水平图片滑动,改进阅读体验

    仿网易新闻Android端APP 主要功能展示和代码实现 差不多花了一周的时间,目前实现的了新闻下的包括头条.体育.娱乐的一系列的新闻展示,以及点击后进入的新闻详情展示. 目前效果 目前效果请访问该网 ...

随机推荐

  1. POJ 3468 A Simple Problem with Integers(线段树区间更新,模板题,求区间和)

    #include <iostream> #include <stdio.h> #include <string.h> #define lson rt<< ...

  2. POJ 2253 Frogger(floyd)

    http://poj.org/problem?id=2253 题意 : 题目是说,有这样一只青蛙Freddy,他在一块石头上,他呢注意到青蛙Fiona在另一块石头上,想去拜访,但是两块石头太远了,所以 ...

  3. cojs EX_香蕉 题解报告

    这道题目是香蕉的加强版 当m=100w时矩阵会很大,而且又有多组询问,所以这道题用原来香蕉的程序会T 所以我们需要更好点的做法 我们考虑优化我们的状态 首先考虑这道题的隐藏性质,考虑不合法的情况 那么 ...

  4. 李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述

    前面已经给大家介绍了iOS开发相关的一些基础知识,其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C+ ...

  5. lintcode :Count and Say 报数

    题目: 报数 报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数.如下所示: 1, 11, 21, 1211, 111221, ... 1 读作 "one 1" -> ...

  6. Python中itertools模块

    itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...

  7. ORA-12571 : TNS : 包写入程序失败

    错误原因 解决方案 修改D:/oracle/ora92/network/admin目录下sqlnet.ora,将”NAMES.DEFAULT_DOMAIN =” 这一行用#注释掉,将“SQLNET.A ...

  8. RestTemplateIntegrationTests

    摘录RestTemplate的集成测试类/* 2.    * Copyright 2002-2010 the original author or authors. 3.    * 4.    * L ...

  9. php命令行用法简介

    Php是一个非常流行的web服务端脚本语言.其实,php不仅仅可以在web服务器中充当重要角色.在命令行一样可以执行. 本文中,笔者为各位介绍下php在命令行中的使用方法. 1.  查看php的版本. ...

  10. group by的SQL语句

    有一张项目表 CREATE TABLE [ProjectTable] ( [ProjectID] NVARCHAR(16) NOT NULL, [ProjectName] NVARCHAR(20) N ...