一、本文所涉及到的知识点 源码下载
二、目标
通过利用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. CentOS服务器上部署 oracle10gr2

    1.下载Centos系统 Linux 镜像文件.         推荐使用 CentOS5.4,下载地址:http://isoredirect.centos.org/centos/5/isos/i38 ...

  2. namenode启动成功,但是不能通过web访问50070问题

    我在CentOS遇到这个问题,50070不行但8088可以,尝试了各种方法无法解决,各个进程全都启动,格式化namenode,各种配置正常均无法解决.后来觉得是默认访问端口没有生效,所以尝试添加端口配 ...

  3. Shell细小问题汇总

    Shell细小问题汇总 本文原文出处: http://blog.csdn.net/bluishglc/article/details/44276607 严禁不论什么形式的转载,否则将托付CSDN官方维 ...

  4. java中inputstream的使用

    java中的inputstream是一个面向字节的流抽象类,其依据详细应用派生出各种详细的类. 比方FileInputStream就是继承于InputStream,专门用来读取文件流的对象,其详细继承 ...

  5. 【C语言】模拟实现memmove函数(考虑内存重叠)

    //模拟实现memmove函数(考虑内存重叠) #include <stdio.h> #include <assert.h> #include <string.h> ...

  6. 第一章 Java Collections Framework总览

    1.Java容器 Java容器中只能存放对象,对于基本数据类型(byte,short,char,int,long,float,double,boolean),需要包装成对象类型(Byte,Short, ...

  7. LNMP环境搭建——PHP篇

    一.源代码安装 1.编译安装 ./configure --prefix=/usr/local/php\ --with-config-file-path=/usr/local/php/etc --wit ...

  8. Codeforces Round #273 (Div. 2) B . Random Teams 贪心

    B. Random Teams   n participants of the competition were split into m teams in some manner so that e ...

  9. 【bzoj1207】[HNOI2004]打鼹鼠

    看了数据范围,想想这不暴力可以过??   DP   #include<algorithm> #include<iostream> #include<cstdlib> ...

  10. ios2--UIView的常见属性

    // // ViewController.m // 06-UIView的常见属性 // #import "ViewController.h" @interface ViewCont ...