款APP开始的时候往往少不了多页面的切换,这就涉及到viewpager的使用,以前往往用Google自带的效果去实现,比较麻烦不说,后面做出来的效果还不如人意。

下面就利用CommonTabLayout+ViewPager来实现类似各电商APP首页的效果;

搭建很简单,第一步,新建一个工程。在build.gradle里面加入下面的引用:

compile 'com.flyco.roundview:FlycoRoundView_Lib:1.1.2@aar'
compile 'com.flyco.tablayout:FlycoTabLayout_Lib:1.5.0@aar'
compile 'com.android.support:design:24.2.1'compile 'com.nineoldandroids:library:2.4.0'

这样就能使用CommTabLayout插件了;

下面是activity_main.xml文件,我在里面加入了一个FloatingActionButton。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"> <android.support.v4.view.ViewPager
android:id="@+id/view_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <android.support.design.widget.FloatingActionButton
android:id="@+id/float_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
app:backgroundTint="#FFFFFF"
android:background="@drawable/ic_arrow_drop_down_black_24dp"/>
</RelativeLayout> <com.flyco.tablayout.CommonTabLayout
android:id="@+id/tab_main"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#FFFFFF"
app:tl_iconGravity="LEFT"
app:tl_iconHeight="20dp"
app:tl_iconMargin="5dp"
app:tl_iconWidth="20dp"
app:tl_indicator_bounce_enable="false"
app:tl_indicator_color="@color/colorPrimary"
app:tl_indicator_gravity="TOP"
app:tl_textSelectColor="@color/colorPrimary"
app:tl_textUnselectColor="#DDD"
app:tl_textsize="15sp"
app:tl_underline_color="#DDDDDD"
app:tl_underline_gravity="TOP"
app:tl_underline_height="1dp"/> </LinearLayout>

先创建几个fagment用来做viewPager的元素,我在viewPager里面加了三个fragment,都是非常简单的布局;这些fragment继承了我自己创建的一个BaseFragment;

BaseFragment

package com.learn.bob.testfragmentadapter;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment; public class BaseFragment extends Fragment { public int dialogTheme; public Context mContext; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public void onPause() {
super.onPause();
} @Override
public void onResume() {
super.onResume();
} }
package com.learn.bob.testfragmentadapter;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; /**
* Created by Administrator on 2018/1/7.
*/ public class ThirdFragment extends BaseFragment { private Context mContext; @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
return inflater.inflate(R.layout.fragment_thirdd, container, false);
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
} private void initView(){ }
}

下面是MainActivity,

package com.learn.bob.testfragmentadapter;

import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; import com.flyco.tablayout.CommonTabLayout;
import com.flyco.tablayout.listener.CustomTabEntity;
import com.flyco.tablayout.listener.OnTabSelectListener; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity{ private ViewPager mViewPager;
private CommonTabLayout mTab;
private FirstFragment firstFragment;
private FirstReplaceFragment firstReplaceFragment;
private SecondFragment secondFragment;
private ThirdFragment thirdFragment;
private ViewPagerAadpter viewPagerAadpter;
private List<BaseFragment> fragmentList;
private ArrayList<CustomTabEntity> mTabEntities = new ArrayList<>();
private FloatingActionButton mBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView(){
mViewPager = (ViewPager)findViewById(R.id.view_main);
mTab = (CommonTabLayout) findViewById(R.id.tab_main);
mBtn = (FloatingActionButton)findViewById(R.id.float_button); mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(null != firstFragment){
// Toast.makeText(MainActivity.this,"点击了",Toast.LENGTH_LONG).show(); }
}
}); if(null == fragmentList){
fragmentList = new ArrayList<BaseFragment>();
} if(null == firstFragment){
firstFragment = new FirstFragment();
fragmentList.add(firstFragment);
mTabEntities.add(new TabEntity("首页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} if(null == secondFragment){
secondFragment = new SecondFragment();
fragmentList.add(secondFragment);
mTabEntities.add(new TabEntity("扉页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} if(null == thirdFragment){
thirdFragment = new ThirdFragment();
fragmentList.add(thirdFragment);
mTabEntities.add(new TabEntity("尾页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} viewPagerAadpter = new ViewPagerAadpter(getSupportFragmentManager(),fragmentList);
mViewPager.setAdapter(viewPagerAadpter);
mTab.setTabData(mTabEntities); mViewPager.setOffscreenPageLimit(3);

//为tab页的点击添加监听事件
mTab.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelect(int position) {
mViewPager.setCurrentItem(position);
} @Override
public void onTabReselect(int position) { }
});

//为viewPager的滑动添加监听事件
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
mTab.setCurrentTab(position);
} @Override
public void onPageScrollStateChanged(int state) { }
}); }

//viewPager的适配器
private class ViewPagerAadpter extends FragmentPagerAdapter{ private List<BaseFragment> fragments;
private FragmentManager fragmentManager; public ViewPagerAadpter(FragmentManager fm, List<BaseFragment> fragmentList) {
super(fm);
this.fragments = fragmentList;
this.fragmentManager = fm;
} @Override
public Fragment getItem(int position) {
return fragments.get(position);
} @Override
public int getCount() {
return fragments.size();
}
} }

在CusstommonTabEntity的基础上我添加了一个TabEntity的实体类来定义我的tab页;

package com.learn.bob.testfragmentadapter;

import com.flyco.tablayout.listener.CustomTabEntity;

/**
* Created by bob on 2017-4-12 14:37
*/ public class TabEntity implements CustomTabEntity {
public String title;
public int selectedIcon;
public int unSelectedIcon; public TabEntity(String title, int selectedIcon, int unSelectedIcon) {
this.title = title;
this.selectedIcon = selectedIcon;
this.unSelectedIcon = unSelectedIcon;
}
public TabEntity(String title) {
this.title = title;
} @Override
public String getTabTitle() {
return title;
} @Override
public int getTabSelectedIcon() {
return selectedIcon;
} @Override
public int getTabUnselectedIcon() {
return unSelectedIcon;
}
}

这是最终的效果,在xml里面能够设置下面tab页滑动时线条文字显示的颜色,也可以设置成无线条

项目GitHub地址:https://github.com/bobLion/TestFragmentAdapte.git

CommonTabLayout+ViewPager快速完成APP首页搭建的更多相关文章

  1. app整体搭建环境:tabBar切换不同控制器的封装(自定义导航+自定义uiviewcontroler+系统自带tabbar+自定义tabbarController)

    首先,一个app的搭建环境非常重要.既要实现基本功能,又要考虑后期优化的性能. 现在很多应用不仅仅是系统自带的控制器,由于需求复杂,基本上需要自定义多控制器来管理. 新建一个BasicNavigati ...

  2. 使用hubuild,mui开发微信app—首页(一)

    写在前面 本系列文章我将介绍一下从零开始利用hubuild,mui实现微信app的开发,该系列是个人学习记录,所以在每篇文章中,都是从怎么去实现开始讲解,然后再把实例中涉及知识点做一个概述. 创建一个 ...

  3. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

  4. 十九. 想快速开发app,需要找外包吗?

    健生干货分享:第19篇 摘要:最近和两位准备开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.他们在纠结:想快速开发app,需要找外包吗? 最近和两位想开发app的创业者聊天 ...

  5. Mockplus教程:分分钟搞定APP首页原型设计

    Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...

  6. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  7. 回答了这四个问题,你就可以打造最佳App首页

    如果把手机APP比作人的话,首页就是脸面了.首页是一款产品的大门,好的开头就是成功的一半. 调查表示,26%的手机APP的平均使用次数只有一次.对首次使用产品的用户而言,首页的好坏关乎到用户对该产品的 ...

  8. Android自定义控件----RadioGroup实现APP首页底部Tab的切换

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  9. 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建

    003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...

随机推荐

  1. (译)IOS block编程指南 2 block开始

    Getting Started with Blocks(开始block) The following sections help you to get started with blocks usin ...

  2. (转)SpringMVC学习(九)——SpringMVC中实现文件上传

    http://blog.csdn.net/yerenyuan_pku/article/details/72511975 这一篇博文主要来总结下SpringMVC中实现文件上传的步骤.但这里我只讲单个文 ...

  3. leetcode_1039. Minimum Score Triangulation of Polygon_动态规划

    https://leetcode.com/problems/minimum-score-triangulation-of-polygon/ 题意:给定一个凸的N边形(N<=50),每个顶点有一个 ...

  4. this.$Message.success('提示信息') 少写了一个c 导致报错

    this.$Message.success('提示信息') 少写了一个c 导致报错 而且 $Message 输出还没显示,导致我以为是没有 $Message 对象了,其实全局对象直接调用即可

  5. vux安装

    1. 在项目里安装vux cnpm install vux --save 2. 安装vux-loader cnpm install vux-loader --save-dev 3. 安装less-lo ...

  6. 【搜索】P1219 八皇后

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  7. zabbix4.2学习笔记系列

    写在前面:对zabbix的接触始于对监控的了解,网上比较多zabbix相关博客,比较多基于3系列甚至2系列,最新开发版zabbix4.2版本已经出来,本博客基于4.2版本学习,参考官网4.2版本和网上 ...

  8. Cycloid Hydraulic Motor Use: Use Failure And Treatment

    The cycloidal hydraulic motor is a small low-speed, high-torque hydraulic motor with a shaft-distrib ...

  9. xshell全局设置配色方案

    新建XTerm1.xcs文件,将以下内容黏贴进去,保存退出 [XTerm] text=839496 cyan(bold)=93a1a1 text(bold)=408080 magenta=dd3682 ...

  10. Java笔记:编写第一个Java程序

    2017.6.17 1.编写第一个Java程序 创建text文本,命名第一个Java程序.txt 在里面编写Java代码 public class Demo1{ public static void ...