在Material Design中,FloatingActionButton(即FAB)是一个很重要的元素。而通常在列表向下滚动的时候,FAB应该会隐藏;而在向上滚动时,FAB应该会显示出来。本篇就记录其中一种实现FAB显示或隐藏的方案,主要应用了属性动画。
其实关于FAB的显示和隐藏,Google官方就提供了其中一种方案:fab.hidden()
和fab.show()
。但是自带的是FAB缩放的效果。并不是上下移动的效果。
那么我们就来看看如何实现FAB上下移动的效果吧!
首先在你想要滑动的View(比如说RecyclerView等)的布局上加上:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
然后再附上FAB的xml:1
2
3
4
5
6
7
8<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:layout_behavior="com.yuqirong.rxnews.ui.view.ScrollAwareFABBehavior"
android:src="@android:drawable/ic_dialog_email" />
注意其中的layout_behavior,是我们自己实现的一个类:
1 | public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { |
我们主要看onNestedScroll()
这个方法,在方法里主要判断了一下是向上滑还是向下滑。再分别去调用animateOut()
和animateIn()
。那我们就来看看animateOut()
。(animateIn()
和animateOut()
的原理一样的,我们只看animateOut()
吧)
在animateOut()
根据SDK的版本判断,若大于或等于14使用属性动画;不然就是使用了自带的hide()
方法。代码还是比较简单的,相信大家都能看得懂。当然如下想在SDK 14以下使用上下移动的效果,那就要用NineOldAndroids这个库了。
效果就是如下所示了:
好了,今天就到这了。bye!