AnroidStudio中使用kotlin语言的自定义动画
第一个练习,后面还会更新第二练习
1.动画效果:
开始
点击start后,小球开始进入大球的嘴里,
点击stop后,停止动画
(还不知道哪个软件录制gif好,下去再搜, 现在只能口述了)
2.主题思路分析:
/*
拆分为多个部分
寻找关系
每个部分的绘制
寻找动画因子
创建动画
*/
详细:
拆分为多个部分: 嘴巴和小球
寻找关系:大小 间距 位置,可以根据自己的要求设置
每个部分的绘制:
onDraw方法
画笔paint 画布 canvas 使用canvas.draw
寻找动画因子:
观察这个动画中什么在变
嘴的动画因子是开始的度数和最后度数的变化
小球的动画因子是圆心的x坐标
创建动画:
使用的是,ValueAnimator.ofFloat ,得到变化的一系列值
设置动画属性: duration repeat
监听值的变化,得到回调,同时使用invalidate,调用onDraw
动画调用的效果, 以及动画的播放、暂停、取消
3.代码:
3.1 先画出图形
自己定义的kotln的class代码
class MouseAnim: View {
// 定义画笔, 只有在需要使用的时候才定义,使用懒加载
// 懒加载使用的是val 不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)
private val mPaint: Paint by lazy {
Paint().apply {
color = Color.BLUE
style = Paint.Style.FILL
}
}
// 定义小球的半径
private var bollRadius = 0f
// 定义嘴巴的半径
private var mouseRadius = 0f
// 两者之间的距离
private var span = 0f
// 嘴巴的x坐标
private var cx = 0f
// 嘴巴的y坐标
private var cy = 0f
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
if (width >= height){
bollRadius = height/6f
if (bollRadius*8.5f > width){
bollRadius = width/8.5f
}
}else{
bollRadius = width/8.5f
}
mouseRadius = bollRadius*3f
span = 0.5f*bollRadius
cx = (width-bollRadius*8.5f)+mouseRadius
cy = height/2f
}
// 两种构造方法
// 代码
constructor(context: Context) :super(context){
}
// xml
constructor(context: Context, attributeSet: AttributeSet): super(context, attributeSet){
}
override fun onDraw(canvas: Canvas?) {
canvas?.drawArc(cx-mouseRadius, cy-mouseRadius, cx+mouseRadius, cy+mouseRadius, 45f, 270f, true,mPaint