Android Compose衰减动画Animatable怎么使用


这篇文章主要讲解了“AndroidCompose衰减动画Animatable怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AndroidCompose衰减动画Animatable怎么使用”吧!首先还是来看一下animateDecay的定义:跟前面介绍的animateTosnapTo一样都是suspend修饰的方法,即必须在协程中调用,参数有三个,分别解析如下:initialVelocity:初始速度animationSpec:动画配置,DecayAnimationSpec类型block:函数类型参数,动画运行的每一帧都会回调这个 block 方法,可用于动画监听返回值跟animateTo一样都是AnimationResult类型。initialVelocity是动画的初始速度,动画会从这个初始速度按照一定的衰减曲线进行衰减,直到速度为 0 或达到阈值时动画停止。那这个初始速度的单位是多少呢?是单位/秒 这里的单位就是动画作用的数值类型,比如数值类型是 Dp,那就代表多免费云主机域名少 Dp 每秒。而衰减曲线的配置就是第二个参数animationSpec,需要注意的是这里的animationSpecDecayAnimationSpec类型,它并不是前面介绍的AnimationSpec的子类,是衰减动画特有的动画配置,看一下DecayAnimationSpec的定义:从源码可以知晓,DecayAnimationSpec是一个独立的接口,跟踪其实现类只有一个DecayAnimationSpecImpl:这个实现类是private的,也就是不能直接创建其实例,那怎么创建呢?Compose 提供三个方法用于创建,分别是splineBasedDecayrememberSplineBasedDecayexponentialDecay,那么这三种方法又有什么区别呢?下面分别对其进行详细介绍。splineBasedDecay根据方法命名我们可以翻译为基于样条曲线的衰减,什么是样条曲线呢?Google得到的答案:样条曲线是经过或接近影响曲线形状的一系列点的平滑曲线。更抽象了,实际上我们并不需要了解他是怎么实现的,当然感兴趣的可以自行查询相关资料,我们只要知道在 Android 中默认的列表惯性滑动就是基于此曲线算法实现的。概念了解清楚后,再来看一下splineBasedDecay方法的定义:只有一个参数density即屏幕像素密度。为什么要传density呢?这是因为splineBasedDecay是基于屏幕像素进行的动画速度衰减,当像素密度越大动画减速越快,动画的时长越短,动画惯性滑动的距离越短;可以理解屏幕像素密度越大摩擦力越大,所以惯性滑动的距离就越短。使用splineBasedDecay实现动画效果,代码如下:将上述代码分别在屏幕尺寸均为 6.0 英寸、屏幕密度分别为 440 dpi 和 320 dpi 的设备上运行可以发现,屏幕密度小的动画运行的距离更长。rememberSplineBasedDecaysplineBasedDecay的作用是一样的,区别在splineBasedDecay上用remember包裹了一层,上一节中使用splineBasedDecay并未用remember包裹,就意味着每次界面刷新时都会重新调用splineBasedDecay创建衰减配置的实例。而使用rememberSplineBasedDecay就可以优化该问题,且无需手动传入density参数。看一下rememberSplineBasedDecay源码:首先也是通过LocalDensity.current获取屏幕像素密度,然后使用remember创建衰减配置实例,remember参数传入了density,也就是当特殊情况屏幕密度发生变化时会重新创建衰减配置实例。在开发中遇到要使用splineBasedDecay的时候一般直接使用rememberSplineBasedDecay即可。思考:前面介绍splineBasedDecay是跟屏幕像素密度有关的,如果需求就是不想因为屏幕像素密度而导致不同设备表现不一样怎么办呢?或者动画作用的数值就是跟屏幕像素密度没关,比如作用于旋转角度的动画,此时怎么办呢?这个时候就不能使用splineBasedDecay,而是应该使用exponentialDecayexponentialDecay是指数衰减,即动画速度按指数递减,他不依赖屏幕像素密度,可用于通用数据的衰减动画。其定义如下:有两个参数,且都有默认值,参数解析如下:frictionMultiplier:摩擦系数,摩擦系数越大,速度减速越快,反之则减速越慢absVelocityThreshold:绝对速度阈值,当速度绝对值低于此值时动画停止,这里的数值是指多少单位的速度,比如动画数值类型为 Dp,这里传 100f 即 100f * 1.dp使用如下:将摩擦系数设置为 5f 体验一下增加摩擦系数后的效果:摩擦系数增大后,动画运行的距离和时间都明显缩短了。将绝对速度阈值设置为 500f 再看一下效果:当动画速度达到阈值速度后动画就停止了,所以阈值越大动画越早停止。下面我们用衰减动画实现一个转盘抽奖的动画效果,即当点击抽奖后转盘开始转动然后缓缓停下,最后指针指向的位置就是中奖的奖品。因为是旋转动画,所以这里我们使用exponentialDecay指数衰减动画将两张图片居中叠加,然后通过动画旋转下面的圆盘就完成了整个动画效果,代码如下:感谢各位的阅读,以上就是“AndroidCompose衰减动画Animatable怎么使用”的内容了,经过本文的学习后,相信大家对AndroidCompose衰减动画Animatable怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: 如何用js实现小程序wx.arrayBufferToBase64

这篇文章主要介绍“如何用js实现小程序wx.arrayBufferToBase64”,在日常操作中,相信很多人在如何用js实现小程序wx.arrayBufferToBase64问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/24 14:38
Next 02/24 14:39

相关推荐