打造滑动效果
来源:互联网 发布:经济与社会发展数据库 编辑:程序博客网 时间: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
- 打造滑动效果
- JS封装函数打造横向滑动的图片切换效果
- JS封装函数打造横向滑动的图片切换效果
- 打造一个具有弹性滑动效果的TextView
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- 对JVM分派概念的理解
- 论文DenseNet(Densely Connected Convolutional Networks)解读
- 浅析前端页面渲染机制
- C语言-函数
- 【模板】求逆元模板
- 打造滑动效果
- XML
- zookeeper 安装 windows环境
- Mac R studio安装rJava遇到问题:第一次用博客,求教各位大神
- 数组去重
- 【精细版】知更鸟begin主题使用常见问题汇总
- FFmpeg在Linux下编译使用
- 给中年工程师的忠告
- 面试复习