demo源码:http://download.csdn.net/detail/dianqiugg/6874511

要点:

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. Android 开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

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

  2. Android高仿网易新闻客户端之动态添加标签

    承接上一篇文章:Android高仿网易新闻客户端之首页,今天来实现动态添加标签效果. 动态标签页是一个流式布局,实现了宽度自动换行高度自动分配的功能,代码如下: FlowLayout.java pac ...

  3. android 仿网易标签切换,Android 仿网易新闻客户端Tab标签

    Android 开源框架ViewPageIndicator和ViewPager仿网易新闻客户端Tab标签 http://blog.csdn.net/xiaanming/article/details/ ...

  4. android分类功能,Android 仿网易新闻客户端分类排序功能

    先来看看网易新闻客户端以及自己实现的效果图,效果当然还是网易的好 gridviewsort.gif 如何实现拖拽一个Item 用WindowManager添加一个ImageView,并且将这个Imag ...

  5. 仿网易新闻客户端UI界面小Demo

    图一 图二 图三 仿网易新闻客户端UI界面Demo 图一:新闻模块 UI界面:点击下方按钮,显示相应内容的页面信息 图三:点击新闻模块上方按钮显示体育,娱乐,科技等页面,相应的内容. 所涉及的知识点: ...

  6. 仿网易新闻客户端的上面的tab和下面的功能条

    2019独角兽企业重金招聘Python工程师标准>>> 仿网易新闻客户端的上面的tab和下面的功能条 package com.and.netease; import com.and. ...

  7. android 仿网易新闻客户端源码都有

    原文:android 仿网易新闻客户端源码都有 android 仿网易新闻服务端源码 源代码下载地址: http://www.zuidaima.com/share/1550463560944640.h ...

  8. IOS开发——仿网易新闻客户端

    IOS开发--仿网易新闻客户端 本文没有内容,传个资源 衔接地址:http://download.csdn.net/detail/u012881779/7152281 左侧导航部分: 新闻版块 订阅版 ...

  9. Android高仿网易新闻客户端之首页

    关于实现网易新闻客户端的界面,以前写过很多博客,请参考: Android实现网易新闻客户端效果 Android实现网易新闻客户端侧滑菜单(一) Android实现网易新闻客户端侧滑菜单(二) 今天用V ...

最新文章

  1. jupyter|魔法函数问题| UsageError: Line magic function `%` not found
  2. 事务处理操作(COMMIT,ROLLBACK)。复制表。更新操作UPDATE实际工作中一般都会有WHERE子句,否则更新全表会影响系统性能引发死机。...
  3. 软件加密与授权管理的概念
  4. Python面试基础题-2018-12-26
  5. ACE_Proactor UDP V2.0
  6. python 爬网页 发布wordpress 包含图片_使用python批量插入wordpress-从理清表结构开始...
  7. 数据结构-----红黑树的插入操作
  8. SQLServer 事务复制中使用脚本添加某个对象的发布
  9. cxf 发布 一个简单的 webservice
  10. python3图片转代码_python3图片转换二进制存入mysql示例代码
  11. 嘉立创又搞大事情了,与你我相关!
  12. 报表 labview_【LabVIEW懒人系列教程小白入门】1.3LabVIEW数据类型
  13. std::remove_if
  14. SVN设置成中文版本
  15. 策略模式和责任链模式
  16. 分布式智能电网-BMS蓄电池安全管理系统在各行业应用
  17. matlab fprintf和disp,matlab中 fprintf 和disp的用法
  18. NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.
  19. 英雄联盟 python 刷等级_自从学了python,我再也不缺英雄联盟的皮肤了
  20. 十万条评论告诉你《流浪地球》的1星都是谁打的?

热门文章

  1. 【Three.js】解决使用Three.js导入obj模型不可见问题详细记录
  2. Java 静态多分派动态单分派
  3. Spring事务7种传播行为速记方法
  4. 大乐透号码(随机生成)
  5. springboot集成log4j2 附完整配置
  6. 企事业单位移动OA系统选型解读
  7. java实验Java面向对象编程_java 实验三 面向对象程序设计(无脑实验系列)
  8. 解决win10卡顿情况
  9. 【黄啊码】浅谈PHP入门|如何学习PHP
  10. 检测Cudnn是否安装成功