一、本文所涉及到的知识点 源码下载
二、目标
通过利用ViewPager+FragmentStatePagerAdapter+TabLayout 实现顶部滑动效果,如图:
三、知识点讲解
1、ViewPager
是Android库中自带的一个控件,可以实现屏幕间的切换,是个容器类,继承自ViewGroup。一般和PageAdapter或者其子类配合使用进行view切换。比如当和Fragment使用时,会和FragmentPagerAdapter或者FragmentStatePagerAdapter一块使用。
viewPager.setAdapter(fragmentStatePagerAdapter);
2、FragmentStatePagerAdapter适配器
我们知道Adapter是作为UI和数据的桥梁,负责创建显示每个子项的View和提供对下层数据的访问。这里我们给ViewPager绑定的是Fragment所以选择了FragmentStatePagerAdapter。
定义Fragment数组 :private List<Fragment> fragments;
把Fragment数组添加到FragmentStatePagerAdapter中
fragmentStatePagerAdapter.setFragments(fragments);
3、TabLayout
TabLayout是在水平布局上显示Tab页,做过C++、.Net等桌面程序或者Web页面的对tab页应该不陌生,使用非常普遍。Android中在xml引用TabLayout如下
<android.support.design.widget.TabLayout
android:id="@+id/course_tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/mask_tags_8"
app:tabIndicatorColor="@color/color_lv_selector"
app:tabSelectedTextColor="@color/mask_tags_1"
app:tabTextColor="@color/color_lv_selector"
app:tabIndicatorHeight="5dp"
>
</android.support.design.widget.TabLayout>
其中app:tabTextColor="@color/color_lv_selector",设置TabLayout字体颜色,app:tabSelectedTextColor="@color/mask_tags_1"为选择后的颜色;android:background="@color/mask_tags_8"为背景色;app:tabIndicatorColor="@color/color_lv_selector"为指示器下标颜色;app:tabIndicatorHeight="5dp"为指示器下标高度。
ViewPager和TabLayout建立联系
 
tabLayout.setupWithViewPager(viewPager);
设置TabLayout滚动模式
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
4、Bundle
这里我们用Bundle在Fragment之间传递对象参数。
这里我们定义了一个序列化类,通过Bundle传送到跟随动态菜单切换的Fragment代码如下:
public static TabFragment newInstance(CourseBean extra){
Bundle bundle=new Bundle();
bundle.putSerializable(KEY,extra);
TabFragment fragment=new TabFragment();
fragment.setArguments(bundle);
return fragment;
}
在Fragment初始化的时候通过Bundle bundle=getArguments();获取bundle实例,然后通过courseBean=(CourseBean)bundle.getSerializable(KEY);获取预先传入的实体类。
四、主要代码
1、这里我们定义了CourseBean实体类进行Fragment之间的参数传递
public class CourseBean implements Serializable {
private String title; // 分类Tab(对应课程名称)名称
private String href; // 课程地址点击地址
private String data_type; // 课程分类
public CourseBean() {
super();
}
public CourseBean(String title, String href, String data_type) {
super();
this.title = title;
this.href = href;
this.data_type = data_type;
}
 
public String getTitle() {
return title;
}
 
public void setTitle(String title) {
this.title = title;
}
 
public String getHref() {
return href;
}
 
public void setHref(String href) {
this.href = href;
}
 
public String getData_type() {
return data_type;
}
 
public void setData_type(String data_type) {
this.data_type = data_type;
}
 
@Override
public String toString() {
return "CategoriesBean [title=" + title + ", href=" + href
+ ", data_type=" + data_type + "]";
}
}

Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载的更多相关文章

  1. Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)

    前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和 ...

  2. android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码

    Android精选源码 android漂亮的加载效果 android各种 选择器 汇总源码 Android仿bilibili搜索框效果 Android记事本app.分类,涂鸦.添加图片或者其他附件 仿 ...

  3. Android 仿今日头条频道管理(上)(GridView之间Item的移动和拖拽)

    前言 常常逛今日头条.发现它的频道管理功能做的特别赞.交互体验很好.如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fo ...

  4. Android仿今日头条手界面

    public class MyIndicator extends HorizontalScrollView implements ViewPager.OnPageChangeListener { pr ...

  5. [Android] Android 手机下 仿 今日头条 新闻客户端

    利用一个月的时间,自学了 Android 开发 ,为了检验学习成果,特意 开发了这个  仿 今日头条 新闻客户端 AppNews 包括图文新闻+视频新闻+图片新闻 预览演示如下: 功能说明: 1)底部 ...

  6. vue2.0仿今日头条开源项目

    vue-toutiao 这是用 vue.js 2.0 高仿 今日头条 的移动端项目,结合了原生app的部分功能以及网页版. 前言 本人是 今日头条 的重度用户,在学习vue.js过程中,在GitHub ...

  7. 自适应 Tab 宽度可以滑动文字逐渐变色的 TabLayout(仿今日头条顶部导航)

    TabLayout相信大家都用过,2015年Google大会上发布了新的Android Support Design库里面包含了很多新的控件,其中就包含TabLayout,它可以配合ViewPager ...

  8. iOS仿今日头条滑动导航

    之前写了篇博客网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问 ...

  9. vue 仿今日头条

    vue 仿今日头条 为了增加移动端项目的经验,近一周通过 vue 仿写今日头条,以下就项目实现过程中遇到的问题以及解决方法给出总结,有什么不正确的地方,恳请大家批评指正^ _ ^!,代码仓库地址为 g ...

随机推荐

  1. openstack windows2012r2 glance镜像制作

    镜像实现: 密码注入 修改密码 根分区扩展 1.下载windows iso镜像 下载地址:http://imsdn.com/MSDN-1.html 例如:cn_windows_server_2012_ ...

  2. noip模拟赛 小Y的问题

    [问题描述]有个孩子叫小 Y,一天,小 Y 拿到了一个包含 n 个点和 n-1 条边的无向连通图, 图中的点用 1~n 的整数编号.小 Y 突发奇想,想要数出图中有多少个“Y 字形”.一个“Y 字形” ...

  3. 我不喜欢的 Rust 特性 (之一) eager drop

    struct Foo; impl Drop for Foo { fn drop(&mut self) { println!("drop"); } } fn main() { ...

  4. Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)

    Linux运行级别 Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运行 ...

  5. 21、Java并发性和多线程-Java中的锁

    以下内容转自http://ifeve.com/locks/: 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的 ...

  6. linux sed 命令的用法

    原文  http://blog.chinaunix.net/uid-24426415-id-77244.html ------------------------------------------- ...

  7. Xsolla带你走进印度移动游戏市场

    作为世界上人口第二大国的印度.随着移动时代的到来,越来越多的开发人员将目光瞄准了这个国家.今天Xsolla就带领大家一起来了解这样一个新兴的移动游戏市场. 印度移动市场潜力巨大 作为世界四大宗教和数字 ...

  8. Python学习笔记9:标准库之日期时间(time包,datetime包)

    一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Pyth ...

  9. xcode,git tips

    change organization name 选中project or target,最右侧Utilities面板->Project Document 修改source folder名字 - ...

  10. 大话设计模式宏观总结——创建型&amp;结构型&amp;行为型

    师傅验收项目的时候.问大话设计模式那三种类型的差别和联系是什么,顿时我傻了眼.由于除了知道这三种类型分别如何称呼以外.从来都没想过为什么这样划分?于是,我便回答:我没想过这个问题.若是从字面上来理解的 ...