打造滑动效果

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值