前面学习的内容:
Android自定义View(一) – 初识
Android自定义View(二) – Paint详解
Android自定义View(三) – drawText()
Android自定义View(四) – Canvas
Android自定义View(五) – 绘制顺序
今天继续学习Android自定义View第六篇内容 属性动画(上)
本文计划根据HenCoder系列文章进行学习,所以代码风格及博文素材可能会摘自其中。
简介
Android 里动画是有一些分类的:动画可以分为两类:Animation 和 Transition;
其中 Animation 又可以再分为 View Animation 和 Property Animation 两类:
View Animation 是纯粹基于 framework 的绘制转变,比较简单,如果你有兴趣的话可以上网搜一下它的用法;
Property Animation,属性动画,这是在 Android 3.0 开始引入的新的动画形式,不过说它新只是相对的,它已经有好几年的历史了,而且现在的项目中的动画 99% 都是用的它,极少再用到 View Animation 了。属性动画不仅可以使用自带的 API 来实现最常用的动画,而且通过自定义 View 的方式来做出定制化的动画。
除了这两种 Animation,还有一类动画是 Transition。 Transition 这个词的本意是转换,在 Android 里指的是切换界面时的动画效果,这个在逻辑上要复杂一点,不过它的重点是在于切换而不是动画,所以它也不是这次要讨论的内容。这次的内容只专注于一点:
Property Animation(属性动画)。在这一期我就基于前面几期讲过的自定义绘制,这一个自定义 View 的分支,来说一下属性动画的原理以及使用。
讲解
学习之前可以先看看视频,对动画有个基本认识
ViewPropertyAnimator
使用方式:View.animate() 后跟 translationX() 等方法,动画会自动执行。
view.animate()
.translationX(300)
.start();
具体可以跟的方法以及方法所对应的 View
中的实际操作的方法如下图所示:
从图中可以看到, View
的每个方法都对应了 ViewPropertyAnimator
的两个方法,其中一个是带有 -By
后缀的,例如,View.setTranslationX()
对应了 ViewPropertyAnimator.translationX()
和 ViewPropertyAnimator.translationXBy()
这两个方法。其中带有 -By()
后缀的是增量版本的方法,例如,translationX(100)
表示用动画把 View
的 translationX
值渐变为 100
,而 translationXBy(100)
则表示用动画把 View
的 translationX
值渐变地增加 100
。l
因为电脑暂无法录制GIF,所以接下来内容摘自原博客Hencoder,可以去原博客学习。
使用方式:
- 如果是自定义控件,需要添加
setter
/getter
方法; - 用
ObjectAnimator.ofXXX()
创建ObjectAnimator
对象; - 用
start()
方法执行动画。
public class SportsView extends View {
float progress = 0;
......
// 创建 getter 方法
public float getProgress() {
return progress;
}
// 创建 setter 方法
public void setProgress(float progress) {
this.progress = progress;
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
......
canvas.drawArc(arcRectF, 135, progress * 2.7f, false, paint);
......
}
}
......
// 创建 ObjectAnimator 对象
ObjectAnimat