这篇文章主要介绍android怎么实现上滑屏幕隐藏底部菜单栏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
引用github上一个仿今日头条项目,项目地址:https://github.com/iMeiji/Toutiao,主要实现的功能是底部菜单栏随用户手势滑动而变化可见状态
& lt; android.support.design.widget.CoordinatorLayout ,android: layout_width=癿atch_parent" ,android: layout_height=癿atch_parent"祝辞 ,& lt; include 布局=癅layout/toolbar"/比; ,& lt; include 布局=癅layout/container"/比; & lt; android.support.design.widget.BottomNavigationView android:才能id=癅 + id/bottom_navigation" ,, android:才能layout_width=癿atch_parent" android:才能layout_height=皐rap_content" android:才能layout_alignParentBottom=皌rue" android:才能layout_gravity=癰ottom" android:才能背景=癅color/viewBackground" 应用程序才能:海拔=?6 dp" 应用程序才能:itemIconTint=癅drawable/nav_item_color_state" 应用程序才能:itemTextColor=癅drawable/nav_item_color_state" 应用程序才能:layout_behavior=癱om.meiji.toutiao.widget.behavior.BottomNavigationBehavior" 应用程序才能:菜单=癅menu/bottom_navigation_main"/祝辞
上面是activity_main的布局代码,第一个是菜单栏,第二个是内容界面,第三个是bottom.bottom导航栏这里采用是BottomNavigationView,具体用法不在介绍。
这里主要看一下BottomNavigationView的应用:layout_behavior属性,该属性是协调布局特有的。网上的一版用法是应用:layout_behavior=癅string/appbar_scrolling_view_behavior"
虽然表面上看是一个字符串,其实在里面调用的也是一个视图类。这次我们通过自定义这个行为类,实现底部菜单栏的显隐性。
java实现类
public class BottomNavigationBehavior extends CoordinatorLayout.Behavior, { ,private ObjectAnimator  outAnimator, inAnimator; ,public BottomNavigationBehavior (Context 上下文,AttributeSet attrs), { ,超级(上下文,attrs); ,} ,//垂直滑动 ,@Override ,public boolean  onStartNestedScroll (CoordinatorLayout coordinatorLayout, View 孩子,,View directTargetChild,, View 目标,int nestedScrollAxes), { ,return nestedScrollAxes ==, ViewCompat.SCROLL_AXIS_VERTICAL; ,} ,@Override ,public void  onNestedPreScroll (CoordinatorLayout coordinatorLayout, View 孩子,,View 目标,int dx, int dy,, int[],消耗),{ ,if (dy 祝辞,0),{//,上滑隐藏 if 才能;(outAnimator ==, null), { 时间=outAnimator 才能;ObjectAnimator.ofFloat(孩子,,“translationY",, 0,, child.getHeight ()); outAnimator.setDuration才能(200); ,,} if 才能;(! outAnimator.isRunning (),,,, child.getTranslationY (), & lt;=, 0), { outAnimator.start才能(); ,,} ,}else if (dy & lt;, 0),{//,下滑显示 if 才能;(inAnimator ==, null), { 时间=inAnimator 才能;ObjectAnimator.ofFloat(孩子,,“translationY",, child.getHeight (),, 0); inAnimator.setDuration才能(200); ,,} if 才能;(! inAnimator.isRunning (),,,, child.getTranslationY(),在=,child.getHeight ()), { inAnimator.start才能(); ,,} ,} ,} }
这个类的就是刚刚那个应用:layout_behavior=癱om.meiji.toutiao.widget.behavior.BottomNavigationBehavior"属性标明的类,看起来很简单,继承了行为抽象类,然后实现了两个方法。来看一下源码如何解释: