android实现上滑屏幕隐藏底部菜单栏的示例

本篇文章引用github上一个仿今日头条项目,项目地址: https://github.com/iMeiji/Toutiao ,主要实现的功能是底部菜单栏随用户手势滑动而变化可见状态

布局代码

这个功能实现起来比较简单,主要利用了CoordinatorLayout的 layout_behavior 的属性。具体代码如下:

<android.support.design.widget.CoordinatorLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <include layout="@layout/toolbar"/>

 <include layout="@layout/container"/>

 <android.support.design.widget.BottomNavigationView
  android:id="@+id/bottom_navigation"
  style="@style/Widget.Design.BottomNavigationView"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_gravity="bottom"
  android:background="@color/viewBackground"
  app:elevation="16dp"
  app:itemIconTint="@drawable/nav_item_color_state"
  app:itemTextColor="@drawable/nav_item_color_state"
  app:layout_behavior="com.meiji.toutiao.widget.behavior.BottomNavigationBehavior"
  app:menu="@menu/bottom_navigation_main"/>

上面是activity_main的布局代码,第一个是菜单栏,第二个是内容界面,第三个是bottom。bottom导航栏这里采用是BottomNavigationView,具体用法不在介绍。

这里主要看一下BottomNavigationView的 app:layout_behavior 属性,该属性是协调布局特有的。网上的一版用法是app:layout_behavior="@string/appbar_scrolling_view_behavior"

虽然表面上看是一个字符串,其实在里面调用的也是一个view类。这次我们通过自定义这个behavior类,实现底部菜单栏的显隐性。

java实现类

public class BottomNavigationBehavior extends CoordinatorLayout.Behavior<View> {
 private ObjectAnimator outAnimator, inAnimator;
 public BottomNavigationBehavior(Context context, AttributeSet attrs) {
 super(context, attrs);
 }

 // 垂直滑动
 @Override
 public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
 return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;
 }

 @Override
 public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
 if (dy > 0) {// 上滑隐藏
  if (outAnimator == null) {
  outAnimator = ObjectAnimator.ofFloat(child, "translationY", 0, child.getHeight());
  outAnimator.setDuration(200);
  }
  if (!outAnimator.isRunning() && child.getTranslationY() <= 0) {
  outAnimator.start();
  }
 } else if (dy < 0) {// 下滑显示
  if (inAnimator == null) {
  inAnimator = ObjectAnimator.ofFloat(child, "translationY", child.getHeight(), 0);
  inAnimator.setDuration(200);
  }
  if (!inAnimator.isRunning() && child.getTranslationY() >= child.getHeight()) {
  inAnimator.start();
  }
 }
 }
}

这个类的就是刚刚那个 app:layout_behavior="com.meiji.toutiao.widget.behavior.BottomNavigationBehavior" 属性标明的类,看起来很简单,继承了Behavior抽象类,然后实现了两个方法。来看一下源码如何解释:

onStartNestedScroll:这个方法主要用于监听协调布局的子view的滚动事件,当此方法返回true,表示要消耗此动作,继而执行下面的 onNestedPreScroll 方法,我们在代码中返回的是,滚动轴是不是竖直滚动轴。如果是的话,就返回true

onNestedPreScroll:这个方法就比较简单了,当用户上滑的时候,隐藏底部菜单栏,这里使用了动画退出,使用了 ObjectAnimator.ofFloat 方法,第一个是view对象,指的就是bottom,第二个是Y轴的变化,第三个是Y轴变化的多少,接下来设置动画秒数。

后记

还可以通过监听appbar来实现bottom的动画。可以参考这篇文章 http://www.jb51.net/article/134141.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android 类似UC浏览器的效果:向上滑动地址栏隐藏功能
  • Android用Scroller实现一个可向上滑动的底部导航栏
  • Android Listview多tab上滑悬浮效果
(0)

相关推荐

  • Android Listview多tab上滑悬浮效果

    样例 近期要做一个含有两个tab切换页面,两个页面有公共的描述信息区域,两个tab都是listview,可以向上或向下拉动刷新,在页面中部有一个tab切换区域,向上滑动的时候tab区域到顶部后就不在移动,向下拉又重新回到初始位置,先看一样样式图吧! 整个需求大致如上图所示,其中上拉刷新和下拉刷新没有截图,采用了开源控件PullToRefreshListView来实现这个效果. 实现方式 总体思路,为了简单不想监控很多手势问题,因此投机取巧的采用下面的方式来实现, a. 整个页面是一个listvi

  • Android 类似UC浏览器的效果:向上滑动地址栏隐藏功能

    思路 要求 ScrollView 嵌套 地址栏 和 WebView 手指滑屏向下滚动(网页向上),如果网页有滚动条,首先把 地址栏 滚动到消失,然后 WebView 才开始滚动: 手指滑屏向上滚动(网页向下),如果地址栏隐藏,那么 地址栏 首先慢慢显示,然后 WebView 才开始滚动. 实现方案 根据 View 的 onInterceptTouchEvent 和 onTouchEvent 原理.把 ScrollView 设置为 WebView 的一个变量,在 WebView的 onInterc

  • Android用Scroller实现一个可向上滑动的底部导航栏

    静静等了5分钟竟不知道如何写我这第一篇文章.每次都想好好的学习学习,有时间多敲敲代码,写几篇自己的文章.今天终于开始实行了,还是有点小激动的.哈哈! 好了废话就不多收了.我今天想实现的一个功能就是一个可以上滑底部菜单栏.为什么我会想搞这么个东西呢, 还是源于一年前,我们app 有这么个需求,当时百度也好谷歌也好,都没有找到想要的效果,其实很简单的一个效果.但是当时我也是真的太菜了,所有有关自定义的控件真的是不会,看别人的代码还好,真要是自己写,一点头绪都没有.因为我试着写了,真的不行啊.当时觉得

  • android实现上滑屏幕隐藏底部菜单栏的示例

    本篇文章引用github上一个仿今日头条项目,项目地址: https://github.com/iMeiji/Toutiao ,主要实现的功能是底部菜单栏随用户手势滑动而变化可见状态 布局代码 这个功能实现起来比较简单,主要利用了CoordinatorLayout的 layout_behavior 的属性.具体代码如下: <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent&q

  • Android中实现密码的隐藏和显示的示例

    在Android开发中,需要密码的隐藏和显示,下面就和大家分享一下使用方法: xml代码: <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/white" android:orientation="horizontal" > <TextView an

  • Android底部菜单栏实现的实例代码

     Android 使用RadioGroup 实现底部导航菜单栏. 一.主界面布局的实现: 先来张效果图: 介绍一下总体界面包括的内容:底部五个导航按钮,主界面包括一个FrameLayout用来放五个Fragment.点击底部按钮会对应跳转到指定的界面. 实现布局:activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="h

  • Android开发之微信底部菜单栏实现的几种方法汇总

     实现方式 实现的方式有很多种 这里总结最常见的几种方式,以后再添加其他的. viewPager + RadioGroup viewPager + FragmentTabHost viewpager +TabLayout viewPager+RadioGroup 感觉这是最简单的一个了,我也就不贴代码 说说我理解的思路吧 通过给pager 和RadioGroup 添加监听,监听两个控件的变化 实现联动 当viewPager的显示pager改变就会触发监听 ,在监听中选中对应的RadioButto

  • ListView上滑和下滑,显示和隐藏Toolbar的实现方法

    1.准备Toolbar 先隐藏系统自带的actionbar,在AndroidManifest.xml文件<application>标签中: android:theme="@style/Theme.AppCompat.Light.NoActionBar"> (注意此处的Activity应继承AppCompatActivity) 再在布局文件中添加Toolbar,activity_main.xml文件中: <?xml version="1.0"

  • Android仿微信底部菜单栏效果

    前言 在市面上,大多数的APP都需要通过底部菜单栏来将程序的功能进行分类整理,通常都是分为3-5个大模块,从而正确有效地引导用户去使用我们的APP.实现底部菜单栏的方法也有很多种. 1.仿微信底部菜单栏(ViewPager+ImagerView+TextView) ......(其他方式后续会补充) 效果预览 首先来个开胃菜,看看实现效果: 先贴出项目所需的资源文件,这些可随个人自由更改颜色和文字 colors.xml <color name="bg_line_light_gray&quo

  • Android仿微信底部菜单栏功能显示未读消息数量

    底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用). 先看一下做出来之后的效果: 以后使用的时候就可以换成自己项目的图片和字体了,主框架不用变哈哈, 首先是要布局layout下xml文件 main.xml: <?xml version="1.0" encoding=&qu

  • Android仿微信顶/底部菜单栏效果

    本文要实现仿微信微信底部菜单栏+顶部菜单栏,采用ViewPage来做,每一个page对应一个XML,当手指在ViewPage左右滑动时,就相应显示不同的page(其实就是xml)并且同时改变底部菜单按钮的图片变暗或变亮,同时如果点击底部菜单按钮,左右滑动page(其实就是xml)并且改变相应按钮的亮度. 一.布局 1.顶部菜单布局,命名为top_layout.xml <?xml version="1.0" encoding="utf-8"?> <R

  • android底部菜单栏实现原理与代码

    上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率.今天把demo贴出来一是方便以后自己查询,二是希望同时也能帮到大家. 底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏做.我这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了很多不必要的层,个人看起来还是不错的,所以贴出来方便以后使用). 先看一下

  • listview的上滑下滑监听,上下滑监听隐藏顶部选项栏的实例

    listview的上滑下滑监听,来隐藏和显示顶部选项栏的特效,京东 同程等APP的资源列表都有此特效. 两个重点: ①listview的setOnTouchListener监听方法 当滑动的Y位置减去按下的Y位置大于最小滑动距离时则为向下滑动 反之,当按下的Y位置减去滑动的Y位置大于最小滑动距离则为向上滑动 ②位移动画 就只要这两点需要注意的,直接上代码,注释很清楚. package com.example.android_topbar_gone; import java.util.ArrayL

随机推荐