帧动画
逐帧动画是一种常见的动画形式(Frame By Frame),其原理简单的说,就是将动作分解成若干单独的图片,在同一个地方,按顺序连贯播放该组图片。分解的越多,动作效果越好,但相应的需要消耗更多的性能。 下面是一组僵尸走路的图片:在res/rawable目录下创建一个action.xml,将图片放入。
上述xml中,有些属性我们需要了解:
每一个item是一张图片
android:drawable 图片的相对位置
android:duration 图片的持续时间
android:oneshot 表示是否重复播放动画,还是只播放一次
在Activity中添加代码,创建一个ImageView,用AnimationDrawable播放动画。
实际效果如下:
补间动画
补间动画又称view动画,他不需要像帧动画那样每一幅图片都是事先准备好的。我们需要一个view对象,设置好它开始和结束的位置,中间的view会自动由系统补齐。其中有4种基本形式:
补间动画一般会采用xml 文件的形式;代码会更容易书写和阅读,同时也更容易复用。
平移动画
参数分别是:
fromXDelta :视图在水平方向x 移动的起始值
toXDelta :视图在水平方向x 移动的结束值
fromYDelta :视图在竖直方向y 移动的起始值
toYDelta:视图在竖直方向y 移动的结束值
透明度动画
参数分别是:
fromAlpha:视图透明度的起始值
toAlpha:视图透明度的结束值
duration: 动画持续时间
interpolator:可以控制动画的变化速率 ,就是动画进行的快慢节奏。Android 系统已经为我们提供了一些Interpolator比如 accelerate_decelerate_interpolator,accelerate_interpolator等,详情可以参考官方文档。
缩放动画
参数分别是:
fromXScale:视图在水平方向x 缩放的起始值
toXScale:视图在水平方向x 缩放的结束值
fromYScale:视图在竖直方向y 缩放的起始值
toYScale:视图在竖直方向y 缩放的结束值
pivot :决定了当前动画执行的参考位置。这个属性主要是在动画的view 发生了“物理位置“变化的时候,需要一个参考点。
旋转动画
参数分别是:
fromDegrees:视图旋转角度的起始值
toDegrees:视图旋转角度的结束值
pivot和duration同上文
当然动作间也可以相互组合,以达到更复杂的动作,这时需要用到set标签
简单的组合效果如下:
除了XML文件形式,java代码也是可以实现的:
属性动画
属性动画可以看作是增强版的补间动画,它可以实现补间动画的效果。
相比之下,属性动画有两个优点:
补间动画只能定义两个关键帧在透明、旋转、位移和倾斜这四个属性的
变换,但是属性动画可以定义任何属性的变化。
补间动画只能对 UI 组件执行动画,但属性动画可以对任何对象执行动画。
于一般会牵扯到对象具体的属性,更多是通过代码动态获取,所以xml文件
实现会有些不方便。
先来看看属性动画实现旋转和透明度动画的示例:
下面是动画组合:
可以看到,动画组合同样是用set来存放
其中playTogether是同时播放,playSequentially是按序播放。
我们可以看到,其通过一个ObjectAnimator的静态工厂方法就能产生任意动画类型,参数都与补间动画类似。
动画持续时间。默认为 300ms,可以通过 android:duration 属性指定。
动画插值方式。通过 android:interploator 指定。
动画重复次数。通过 android:repeatCount 指定。
重复行为。通过 android:repeatMode 指定。
动画集。在属性资源文件中通过来组合。
帧刷新率。指定多长时间播放一帧。默认为 10 ms。
对比之下,属性动画貌似强大了许多,实现很方便,同时动画可变化的值也有了更多的选择,动画所能呈现的细节也更多。但属性动画也有不足,在xml 文件实现的补间动画,复用率更高,在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏等。可以看出,两者各有优劣,也都是安卓开发中提高用户体验效果常用的动画。
我们是图灵智能创新团队,同时也是广东海洋大学第一个人工智能创新团队,我们的方向有:计算机视觉、自然语言处理、前端&后台。本公众号主要面向对人工智能感兴趣的读者,如果想了解更多,欢迎关注我们!