动画基础
图片之间的平滑切换是非常重要的。用户希望app里没有比较突兀的跳变。Glide的动画就是为了解决这个问题。Glide自带了一个标准的动画去减轻UI中的变化,就是之前的文章中用过的.crossFade()。
但在这篇文章中,我们会学习另外一个不同于.crossFade()的方案。Glide提供了两个方案(忽略了第三个废弃的方案:animate(Animation animation))去设置动画。两个版本都用.animate()方法,但是需要传入不一样的参数。
我们应当认识到动画只在当不能从缓存中提供时采用。如果图片在缓存内,它应该直接被加载,动画则是没有必要显示的。
资源动画
回到代码,第一个方案是传递一个指向Android动画资源的id。Android系统提供一个从左边滑入的动画:android.R.anim.slide_in_left。这个代码就是一个XML描述的动画:
1 |
|
当然,你可以创建你自己的XML动画,例如一个小的缩放动画,让图片从小变大到全尺寸:
1 |
|
我们也可以将动画设置到Glide的构造器里:
1 | Glide |
当图片从网络准备好加载的时候,从左边滑入。
通过自定义类来实现
当图片加载到常规的ImageView的时候很好实现。但如果目标是自定义的呢?另外一个方案将会非常有用,跟传递一个动画资源的引用不同,需要通过实现ViewPropertyAnimation.Animator接口的一个类。
接口非常简单,只要实现无返回类型的animate(View view)方法,其中View对象就是整个target view。如果它是自定义view,你可以找到你的view的子元素,做必要的动画。
先看个简单的例子。假设想要实现一个渐变的动画,你需要创建一个动画类:
1 | ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() { |
下一步,你需要在Glide的请求里设置动画:
1 | Glide |
当然,在animate(View view)对象方法中,你可以做任何你要做的,用动画发挥你的创意。如果你正使用自定义view,你就可以转换view对象,然后调用自定义方法在你的自定义view上。
经测试,使用ViewPropertyAnimation来实现自定义View的动画是有问题的,动画无法显示,图片直接加载出来。可以通过其它方法来实现,代码详见Github上的GlideTest
参考资料:
签到钱就到 Glide入门教程——14.用animate()定制动画