打造滑动效果

来源:互联网 发布:经济与社会发展数据库 编辑:程序博客网 时间:2024/06/06 00:03

FlycoTabLayout+TabLyout+ViewPager 实现底部菜单页面滑动效果

最近在做项目用到了FlycoTabLayout+TabLyout+ViewPager实现底部菜单功能,如下几步轻松实现这个功能:

  • 1、Android studio 项目导入依赖compile路径
compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'
  • 2、TabEntity这里是tab的标题、选中的图标、未选中的图标
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;    }    @Override    public String getTabTitle() {        return title;    }    @Override    public int getTabSelectedIcon() {        return selectedIcon;    }    @Override    public int getTabUnselectedIcon() {        return unSelectedIcon;    }}
  • 3、设置fragment,我这里新建了四个fragment。这里我只展示一个,其他类似
public class MyFragment extends Fragment {    private String mTitle;    public static MyFragment getInstance (String title){        MyFragment myFragment=new MyFragment();        myFragment.mTitle=title;        return  myFragment;    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragment_my, null);        return v;    }}
  • 4、运用到官方的简化viewholder
package com.example.zct11.course.utils;import android.util.SparseArray;import android.view.View;@SuppressWarnings({ "unchecked" })public class ViewFindUtils{    /**     * ViewHolder简洁写法,避免适配器中重复定义ViewHolder,减少代码量 用法:     *      * <pre>     * if (convertView == null)     * {     *  convertView = View.inflate(context, R.layout.ad_demo, null);     * }     * TextView tv_demo = ViewHolderUtils.get(convertView, R.id.tv_demo);     * ImageView iv_demo = ViewHolderUtils.get(convertView, R.id.iv_demo);     * </pre>     */    public static <T extends View> T hold(View view, int id)    {        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();        if (viewHolder == null)        {            viewHolder = new SparseArray<View>();            view.setTag(viewHolder);        }        View childView = viewHolder.get(id);        if (childView == null)        {            childView = view.findViewById(id);            viewHolder.put(id, childView);        }        return (T) childView;    }    /**     * 替代findviewById方法     */    public static <T extends View> T find(View view, int id)    {        return (T) view.findViewById(id);    }}
  • 5、主函数中实现FlycoTabLayout+TabLyout+ViewPager
package com.example.zct11.course.ui;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import com.example.zct11.course.R;import com.example.zct11.course.adapter.MypagerAdapter;import com.example.zct11.course.base.BaseActivity;import com.example.zct11.course.bean.TabEntity;import com.example.zct11.course.ui.home.fragment.DownLoadFragment;import com.example.zct11.course.ui.home.fragment.MainFragment;import com.example.zct11.course.ui.home.fragment.MessageFragment;import com.example.zct11.course.ui.home.fragment.MyFragment;import com.example.zct11.course.utils.ViewFindUtils;import com.flyco.tablayout.CommonTabLayout;import com.flyco.tablayout.listener.CustomTabEntity;import com.flyco.tablayout.listener.OnTabSelectListener;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    private ArrayList<Fragment> mFragments = new ArrayList<>();    private CommonTabLayout mTabLayout;    private MypagerAdapter adapter;    private String[] mTitles = {"首页", "消息", "我的", "设置"};    private View view;    private ViewPager viewPager;    //tab的标题、选中图标、未选中图标    private ArrayList<CustomTabEntity> mTabEntities = new ArrayList<>();    private int[] mIconUnselectIds = {            R.mipmap.tab_home_unselect, R.mipmap.tab_speech_unselect,            R.mipmap.tab_contact_unselect, R.mipmap.tab_more_unselect};    private int[] mIconSelectIds = {            R.mipmap.tab_home_select, R.mipmap.tab_speech_select,            R.mipmap.tab_contact_select, R.mipmap.tab_more_select};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        view=getWindow().getDecorView();        viewPager= (ViewPager) findViewById(R.id.viewpager);        mTabLayout = ViewFindUtils.find(view,R.id.tl);        initData();        mTabLayout.setTabData(mTabEntities);        mTabLayout.setOnTabSelectListener(new OnTabSelectListener() {            @Override            public void onTabSelect(int position) {                viewPager.setCurrentItem(position);            }            @Override            public void onTabReselect(int position) {            }        });        viewPager.setAdapter(new MypagerAdapter(getSupportFragmentManager(),mFragments));        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                mTabLayout.setCurrentTab(position);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });        viewPager.setCurrentItem(1);        //设置红点        mTabLayout.showDot(3);    }    private void initData() {        mFragments.add(MainFragment.getInstance(mTitles[0]));        mFragments.add(MessageFragment.getInstance(mTitles[1]));        mFragments.add(DownLoadFragment.getInstance(mTitles[2]));        mFragments.add(MyFragment.getInstance(mTitles[3]));        //设置tab的标题、选中图标、未选中图标        for (int i = 0; i < mTitles.length; i++) {            mTabEntities.add(new TabEntity(mTitles[i], mIconSelectIds[i], mIconUnselectIds[i]));        }    }}
  • 6 在activity_main.xml中的布局如下
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tl="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    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="match_parent"        android:layout_height="match_parent"></android.support.v4.view.ViewPager>    <com.flyco.tablayout.CommonTabLayout        android:id="@+id/tl"        android:layout_width="match_parent"        android:layout_height="50dp"        android:layout_alignBottom="@+id/viewpager"        android:layout_alignParentBottom="true"        android:background="#ffffff"        tl:tl_divider_padding="5dp"        tl:tl_iconGravity="TOP"        tl:tl_iconHeight="18dp"        tl:tl_iconMargin="5dp"        tl:tl_iconWidth="18dp"        tl:tl_indicator_anim_enable="true"        tl:tl_indicator_bounce_enable="true"        tl:tl_indicator_color="#2C97DE"        tl:tl_indicator_corner_radius="2dp"        tl:tl_indicator_gravity="TOP"        tl:tl_indicator_height="4dp"        tl:tl_indicator_style="TRIANGLE"        tl:tl_indicator_width="4dp"        tl:tl_indicator_width_equal_title="true"        tl:tl_textSelectColor="#2C97DE"        tl:tl_textUnselectColor="#66000000"        tl:tl_textsize="15sp"        tl:tl_underline_color="#DDDDDD"        tl:tl_underline_gravity="TOP"        tl:tl_underline_height="1dp" /></RelativeLayout>

总结

在这次项目中我采用FlycoTabLayout+TabLyout+ViewPager轻松实现底部菜单功能,
fragment的背景颜色是不是有点鲜艳?这是我用来测试而已,希望大家能够见谅。

效果图如下:

这里写图片描述

阅读全文
0 0
原创粉丝点击