Android自定义View之自定义drawable

250 阅读2分钟

@TOC

思路: 观察动画由哪些流程组成(动画分解)

1 初始状态: 背景 圆圈

2 旋转动画 时长 圆圈从-90 逆时针方向旋转 3圈 -1080度 叉 缩小为一个圆点 3 圆点上移 时长 4 圆点下移 时长 5 由一个圆点 变成 一个勾勾 时长

动画编排 ValueAnimator 改变属性的值 addUpdateLister onAnimationUpdate(){ 获取属性值 invalidateSelf(); }

旋转动画 matrix setrotate 0 -> 1 旋转 度数 * totateDegreeScale(系数 百分比)

叉 - > 圆点 1 -> 0 叉的长度 * 系数

圆点上移 平移 0 -> 1 上移

圆点下移 平移 0 -> 1 下移

画勾勾 0 -> 1

延时 -> 初始状态 addListener onAnimationEnd 状态 = 初始状态 invalidateSelf

已知角度θ 半径r A(x,y) 中心点( cx,cy) x = r * cosθ y = r * sinθ

x1 = cx - r * cosθ y1 = cy + r * sinθ 画线 两个点 起始点

运行效果

[video(video-74JEYg3p-1622968473150)(type-bilibili)(url-player.bilibili.com/player.html…)]

代码实现

gitee.com/fakerxuan/f…

kotlin知识补充

区间

200..299 表示 200 -> 299 的区间(包括 299 )

when 关键字

Java 当中的 switch 的⾼级版,分⽀条件上可以⽀持表达式

受检异常

Kotlin 不需要使⽤ try-catch 强制捕获异常

编译期常量

在静态变量上加上 const 关键字变成编译期常量

标签

在 Java 中通过 「 类名.this 例如 Outer.this 」 获取⽬标类引⽤

在 Kotlin 中通过「 this@类名 例如 this@Outer 」获取⽬标类引⽤

内部类

在 Kotlin 当中,内部类默认是静态内部类

通过 inner 关键字声明为嵌套内部类

可⻅性修饰符

默认的可⻅性修饰符是 public

新增的可⻅性修饰符 internal 表示当前模块可⻅

注释

注释中可以在任意地⽅使⽤ [] 来引⽤⽬标,代替 Java 中的 @param @link

非空断⾔

可空类型强制类型转换成不可空类型可以通过在变量后⾯加上 !! ,来达到类型转

换。

open/fifinal

Kotlin 中的类和函数,默认是被 final 修饰的 ( abstract 和 override 例外)