一起Talk Android吧(第四百八十回:用代码实现视图动画)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百八十回:用代码实现视图动画)相关的知识,希望对你有一定的参考价值。

文章目录

各位看官们大家好,上一回中咱们说的例子是"集合类视图动画",这一回中咱们说的例子是"用代码实现视图动画"。闲话休提,言归正转,让我们一起Talk android吧!

实现方法

我们在前面章回中介绍的视图动画都是通过xml文件实现的,在使用动画的时候,在代码中获取动画并且绑定到控件上。动画的实现主要是在xml中配置动画的属性,因此我们依据不同类型的视图动画介绍了不同的标签和属性,包含渐变类,缩放类、平移类、旋转类和集合类,一共五类视图动画。本章回中将介绍使用代码实现视图动画的方法,详细如下:

  1. 通过构造方法创建视图动画类的对象;
  2. 绑定动画到控件上;
  3. 绑定动画通过startAnimation方法实现,这种方法和绑定xml中动画的方法完全一样;

示例代码

用代码实现动画的过程比较简单,不过核心操作体现在构造方法中,因为构造方法是重载方法,有多个构造方法,我们以渐变类动画为例来说明。

AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);
alphaAnimation.setDuration(4000);
mImageViewBubble.startAnimation(alphaAnimation);

上面的代码中通过AlphaAnimation类的构造方法创建了渐变类动画的对象,该类的构造方法有多种,我们使用带有两个参数的构造方法:

  • 第一个参数表示动画开始时的透明度;
  • 第二个参数表示动画结束时的透明度;

其实这两个参数对应了alpha标签中的fromAlphatoAlpha属性。代码中的setDuration()方法不是AlphaAnimation类的方法而是从父类继承来的方法。startAnimation()方法用来把动画绑定到ImageView控件上,这种方法和绑定xml中动画的方法完全一样。

集合类动画的使用方法也其它类动画不一样,因为它没有属性,所以构造方法比较简单。通常使用带有一个参数的构造方法来创建集合类对象,该参数是布尔类型,取值为true时表示它包含的动画使用共用的插值器。取值为false时表示它包含的动画使用动画自己的插值器;

集合类动画的特点是把其它类型的动画组成一个动画集,用代码实现集合类动画时通过addAnimation()方法把其它类型的动画组成动画集,该方法的参数就是其它类动画的对象,下面是示例代码:

AnimationSet animationSet = new AnimationSet(false);
animationSet.addAnimation(alphaAnimation);

演绎推广

我们以渐变类动画为例介绍了如何通过代码实现动画,缩放、平移、旋转和集合类动画的实现方法也类似。不同的地方在于各个类的构造方法不同,接下来我分享一下如何把动画的实现从xml配置迁移到代码实现的方法:

  1. xml中的标签名称对应代码中的类名,通常是在标签名后面加上Animation来组成类名;
  2. xml中的属性对应该类中构造方法的参数,参数类型和数量与属性类型和数量完全匹配;
  3. 共同类Animation变成了父类,渐变类等五种类型的动画是它的子类;
  4. 共同属性变成了父类的公有方法,子类对象通过setXXX()方法来配置共同属性;
  5. 有一个例外是集合类动画,它的类名是AnimationSet,构造方法比较简单,主要通过addAnimation()方法把其它类型的动画组成动画集;

经验总结

我们介绍了实现视图类动画的两种方法:xml实现和代码实现。其实它们的实现方法类似,xml实现时重点关注各个标签以及标签包含的属性,代码实现时重点关注类以及类的构造方法。而xml中的标签就是代码中的类,xml中属性就是类中构造方法的参数。

当然了这两种实现动画的方法还是有些差异的:

  • xml实现动画比较清晰,代码和实现是分开的,互不影响;
  • 代码实现动画比较灵活,可以随时使用;

在实际项目中,我的经验是使用xml来实现动画,这样有助于项目代码管理。大家不必拘泥于我们的经验,可以依据项目需要来选择一种实现方法。

看官们,关于"用代码实现视图动画"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百八十回:用代码实现视图动画)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百八十八回:ObjectAnimator)

一起Talk Android吧(第四百八十六回:值动画:ValueAnimator)

一起Talk Android吧(第四百八十九回:如何使用代码实现ObjectAnimator)

一起Talk Android吧(第四百八十二回:如何修改Switch的长宽

一起Talk Android吧(第四百八十二回:如何修改Switch的长宽

一起Talk Android吧(第四百八十七回:值动画的代码实现方法)