Android 浮动按钮的伸缩效果
在做项目时想增加点动感,于是就有如下效果:

实现起来也很简单,通过属性动画和recyclerview 滑动结合就很好实现了。
通过给recycleview添加一个滑动监听:通过滚动的差值来处理动画
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > ){
hidenFabAnim();
}else{
showFabAnim();
}
}
});
两个动画如下:
/**
* 动画隐藏浮动按钮
*/
private void hidenFabAnim() {
if (!isFabAnimg && mActionButton != null && mActionButton.getVisibility() == View.VISIBLE) {
Animator animator = ObjectAnimator.ofFloat(mActionButton, "translationY", 0f, 100f);
animator.setDuration();
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
isFabAnimg = true;
}
@Override
public void onAnimationEnd(Animator animation) {
isFabAnimg = false;
mActionButton.setVisibility(View.GONE);
} @Override
public void onAnimationCancel(Animator animation) {
isFabAnimg = false;
} @Override
public void onAnimationRepeat(Animator animation) { }
});
animator.start();
}
} /**
* 动画显示浮动按钮
*/
private void showFabAnim(){
if (mActionButton != null && !isFabAnimg && mActionButton.getVisibility() == View.GONE) {
Animator animator = ObjectAnimator.ofFloat(mActionButton,"translationY",100f,0f);
animator.setDuration();
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
isFabAnimg = true;
} @Override
public void onAnimationEnd(Animator animation) {
isFabAnimg = false;
} @Override
public void onAnimationCancel(Animator animation) {
isFabAnimg = false;
} @Override
public void onAnimationRepeat(Animator animation) { }
});
mActionButton.setVisibility(View.VISIBLE);
animator.start();
}
}
动画中给定了移出屏幕和显示在屏幕的距离是100,这个值并不是那么确定性,项目中需要通过屏幕密度来算这个值的大小,以便适应更好的滑动效果;定义了个
isFabAnimg 变量,用来明确动画的状态,避免了重复执行显示或者隐藏的动画。 可见android中要实现某些小效果还是非常的方便的
Android 浮动按钮的伸缩效果的更多相关文章
- Android 浮动按钮+上滑隐藏按钮+下滑显示按钮
1.效果演示 1.1.关注这个红色的浮动按钮 . 可以看到,上滑的时候浮动按钮消失,因为用户迫切想知道下面的东西,而不是回到顶部. 当下滑的时候,用户想回到原来的位置,就可以点击浮动按钮,快速回到顶部 ...
- [android] 切换按钮-自定义控件-拖动效果
重写View的onTouchEvent()方法,传递进来MotionEvent对象 调用MotionEvent对象的getAction()方法,获取当前动作 switch判断一下当前动作 事件为Mot ...
- Android实现按钮点击效果(第一次点击变色,第二次恢复)
1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" ...
- Android浮动按钮
https://www.jianshu.com/p/18cbc862ba7b https://github.com/yhaolpz/FloatWindow 这样就解决了切换 Activity 时悬浮控 ...
- Qt浮动按钮的实现(使用窗口背景透明、实现只显示浮动按钮的目的)
Qt浮动按钮的实现 效果如下: 图3 估计很多做Qt有一定经验的朋友会觉得这个效果不难,但是这是一个需求奇葩的实际业务中做出的效果.笔者会想讲下客户的需求和整体框架的矛盾. 整个项目主要是由Qt搭建的 ...
- android 拖拽图片&拖动浮动按钮到处跑
来自老外: 拖拽图片效果 方法一: 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- android 按钮点击效果实现
在其他人的博客里看到其实实现按钮点击效果的方法有很多,这里提到的只是其中一个办法 图片素材(我自己用截图截的,可以自己搞) 放到mipmap目录下(studio是在这个目录下 , eclipse 直接 ...
- 可折叠的ToolBar+抽屉菜单NavigationView+浮动按钮FloatButton
使用Material Design风格的ToolBar和抽屉导航 先看个简单的运行效果 主要记录下布局的写法 1 用到的Google Design依赖和V7包依赖 compile 'com.andro ...
- 50个Android开发人员必备UI效果源码[转载]
50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面 ...
随机推荐
- charles请求入参中有乱码
工作中,需要入参,但是发现入参中,有中文的都是乱码,仔细查阅headers,发现Content-Type是application/x-www-form-urlencoded类型,而实际上,入参是jso ...
- 译——meta viewport
此文翻译PPK大神的——meta viewport. 主要讲到了第三种viewport——ideal viewport,以及使用meta viewport 设置移动浏览器的视口. the meta v ...
- event对象的使用注意事项
首先event是在事件发生的时候产生的,所以必须在事件发生的事件监听函数里面使用他.不然的话就没用的.会找不到这个事件: 错误的写法: 报错的内容: 正确的写法:
- Decorator模式(装饰器模式)
Decorator模式? 假如现在有一块蛋糕,如果只涂上奶油,其他什么都不加,就是奶油蛋糕.如果加上草莓,就是草莓奶油蛋糕.如果再加上一块黑色巧克力板,上面用白色巧克力写上姓名,然后插上代表年龄的蜡烛 ...
- POJ 2068 NIm (dp博弈,每个人都有特定的取最大值)
题目大意: 有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输.问偶数队是否能赢. 分析: 题目数据 ...
- Uva1608
如果一个序列的所有子序列中均存在至少一个元素,这个元素在该子序列中只出现一次,则这个序列non-boring. 当一个序列[x,y]中没有元素只出现一次,那么该序列不符合要求,如果有的话,设为第i个元 ...
- scala数据类型
# Scala数据类型 ## 1.数值类型 ### 1.1 与Java一样Scala也有8种数值类型 * Byte * Char * Short * Int * Long * Float * Doub ...
- 029 Divide Two Integers 两数相除
不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...
- 让最新的 Android Q Beta 3 强制重启的 Project Mainline,到底是什么?
一. 序 最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能. 近期不少体验用户反 ...
- (三)Redis两种持久化方案
Redis的持久化策略:2种 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘.RDB是Redis默认采用的持久化方 ...