摘要
使用Canvas和状态模式实现一个点赞效果

关键步骤
1. 获取Bitmap对象和Bitmap对象释放。
创建
|
|
回收
|
|
如果图片过大可以压缩
|
|
2. 创建画笔,设置画笔。
|
|
3. canvas绘制Bitmap
|
|
4. 分析动画状态,分解状态

将动画过程分解成几个阶段,然后定义基类(模板方法)
5. 计算各个状态的变化过程,用总时间等分绘制。
|
|
关键点
- 简单自定义View实现
重写onDraw()
- 状态模式的使用
分解状态,将复杂问题拆分解决的思路。
使用Canvas和状态模式实现一个点赞效果
1. 获取Bitmap对象和Bitmap对象释放。
创建
|
|
回收
|
|
如果图片过大可以压缩
|
|
2. 创建画笔,设置画笔。
|
|
3. canvas绘制Bitmap
|
|
4. 分析动画状态,分解状态
将动画过程分解成几个阶段,然后定义基类(模板方法)
5. 计算各个状态的变化过程,用总时间等分绘制。
|
|
重写onDraw()
分解状态,将复杂问题拆分解决的思路。
Google I/O 17推出了许多新的特性,在动画这一块又有新的API供开发者使用,具体视频请见Android Animations Spring to Life (Google I/O ‘17),主要介绍了Physics-based Animations,在动画API中引入了DynamicAnimation,并介绍了它的两个子类FlingAnimation和SpringAnimation的使用,开发者可以使用新的API创建更加动态化的动画。
Spring Animation
FlingAnimation
本篇文章中使用的代码是建立在上篇文章基础之上的,如果你还没有阅读过前面的文章,建议先去参考阅读一下 Android中的属性动画基础用法和Android中的属性动画高级用法
Interpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果。那么什么叫做非线性运动的动画效果呢?就是说动画改变的速率不是一成不变的,像加速运动以及减速运动都属于非线性运动。
不过Interpolator并不是属性动画中新增的技术,实际上从Android 1.0版本开始就一直存在Interpolator接口了,而之前的补间动画当然也是支持这个功能的。只不过在属性动画中新增了一个TimeInterpolator接口,这个接口是用于兼容之前的Interpolator的,这使得所有过去的Interpolator实现类都可以直接拿过来放到属性动画当中使用,那么我们来看一下现在TimeInterpolator接口的所有实现类,如下图所示:
可以看到,TimeInterpolator接口已经有非常多的实现类了,这些都是Android系统内置好的并且我们可以直接使用的Interpolator。每个Interpolator都有它各自的实现效果,比如说AccelerateInterpolator就是一个加速运动的Interpolator,而DecelerateInterpolator就是一个减速运动的Interpolator。
阅读本篇文章需要你对属性动画有一定的了解,并且掌握属性动画的基本用法,如果你还对属性动画不够了解的话,建议先去阅读 Android中的属性动画基本用法
在上一篇文章中ValueAnimator.ofFloat()方法就是实现了初始值与结束值之间的平滑过度,那么这个平滑过度是怎么做到的呢?其实是系统内置了一个FloatEvaluator,它通过计算告知动画系统如何从初始值过度到结束值,我们来看一下FloatEvaluator的代码实现:
|
|
可以看到,FloatEvaluator实现了TypeEvaluator接口,然后重写evaluate()方法。evaluate()方法当中传入了三个参数,第一个参数fraction非常重要,这个参数用于表示动画的完成度的,我们应该根据它来计算当前动画的值应该是多少,第二第三个参数分别表示动画的初始值和结束值。那么上述代码的逻辑就比较清晰了,用结束值减去初始值,算出它们之间的差值,然后乘以fraction这个系数,再加上初始值,那么就得到当前动画的值了。
Android 5.0(Lollipop, API 21)后,新增了 <vector>
标签,以 VectorDrawable 的形式支持 SVG 类型矢量图形(SVG本质为XML标记描述的图形)。
Vector图像刚发布的时候,是只支持Android 5.0+的,对于Android pre-L的系统来说,并不能使用,所以,可以说那时候的Vector并没有什么卵用。不过自从AppCompat 23.2之后,Google对p-View的Android系统也进行了兼容,也就是说,Vector可以使用于Android 2.1以上的所有系统,只需要引用com.android.support:appcompat-v7:23.2.0
以上的版本就可以了,这时候,Vector应该算是迎来了它的春天。
SVG:可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准。SVG 使用 XML 格式定义图形
与其他图像格式相比,使用 SVG 的优势在于: