一起Talk Android吧(第四百八十回:用代码实现视图动画)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百八十回:用代码实现视图动画)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们大家好,上一回中咱们说的例子是"集合类视图动画",这一回中咱们说的例子是"用代码实现视图动画"。闲话休提,言归正转,让我们一起Talk android吧!
实现方法
我们在前面章回中介绍的视图动画都是通过xml文件实现的,在使用动画的时候,在代码中获取动画并且绑定到控件上。动画的实现主要是在xml中配置动画的属性,因此我们依据不同类型的视图动画介绍了不同的标签和属性,包含渐变类,缩放类、平移类、旋转类和集合类,一共五类视图动画。本章回中将介绍使用代码实现视图动画的方法,详细如下:
- 通过构造方法创建视图动画类的对象;
- 绑定动画到控件上;
- 绑定动画通过startAnimation方法实现,这种方法和绑定xml中动画的方法完全一样;
示例代码
用代码实现动画的过程比较简单,不过核心操作体现在构造方法中,因为构造方法是重载方法,有多个构造方法,我们以渐变类动画为例来说明。
AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);
alphaAnimation.setDuration(4000);
mImageViewBubble.startAnimation(alphaAnimation);
上面的代码中通过AlphaAnimation
类的构造方法创建了渐变类动画的对象,该类的构造方法有多种,我们使用带有两个参数的构造方法:
- 第一个参数表示动画开始时的透明度;
- 第二个参数表示动画结束时的透明度;
其实这两个参数对应了alpha标签中的fromAlpha
和toAlpha
属性。代码中的setDuration
()方法不是AlphaAnimation
类的方法而是从父类继承来的方法。startAnimation
()方法用来把动画绑定到ImageView控件上,这种方法和绑定xml中动画的方法完全一样。
集合类动画的使用方法也其它类动画不一样,因为它没有属性,所以构造方法比较简单。通常使用带有一个参数的构造方法来创建集合类对象,该参数是布尔类型,取值为true时表示它包含的动画使用共用的插值器。取值为false时表示它包含的动画使用动画自己的插值器;
集合类动画的特点是把其它类型的动画组成一个动画集,用代码实现集合类动画时通过addAnimation
()方法把其它类型的动画组成动画集,该方法的参数就是其它类动画的对象,下面是示例代码:
AnimationSet animationSet = new AnimationSet(false);
animationSet.addAnimation(alphaAnimation);
演绎推广
我们以渐变类动画为例介绍了如何通过代码实现动画,缩放、平移、旋转和集合类动画的实现方法也类似。不同的地方在于各个类的构造方法不同,接下来我分享一下如何把动画的实现从xml配置迁移到代码实现的方法:
- xml中的标签名称对应代码中的类名,通常是在标签名后面加上Animation来组成类名;
- xml中的属性对应该类中构造方法的参数,参数类型和数量与属性类型和数量完全匹配;
- 共同类Animation变成了父类,渐变类等五种类型的动画是它的子类;
- 共同属性变成了父类的公有方法,子类对象通过setXXX()方法来配置共同属性;
- 有一个例外是集合类动画,它的类名是AnimationSet,构造方法比较简单,主要通过addAnimation()方法把其它类型的动画组成动画集;
经验总结
我们介绍了实现视图类动画的两种方法:xml实现和代码实现。其实它们的实现方法类似,xml实现时重点关注各个标签以及标签包含的属性,代码实现时重点关注类以及类的构造方法。而xml中的标签就是代码中的类,xml中属性就是类中构造方法的参数。
当然了这两种实现动画的方法还是有些差异的:
- xml实现动画比较清晰,代码和实现是分开的,互不影响;
- 代码实现动画比较灵活,可以随时使用;
在实际项目中,我的经验是使用xml来实现动画,这样有助于项目代码管理。大家不必拘泥于我们的经验,可以依据项目需要来选择一种实现方法。
看官们,关于"用代码实现视图动画
"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第四百八十回:用代码实现视图动画)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百八十八回:ObjectAnimator)
一起Talk Android吧(第四百八十六回:值动画:ValueAnimator)
一起Talk Android吧(第四百八十九回:如何使用代码实现ObjectAnimator)
一起Talk Android吧(第四百八十二回:如何修改Switch的长宽