kotlin自定义动画View的练习

AnroidStudio中使用kotlin语言的自定义动画
第一个练习,后面还会更新第二练习
1.动画效果:
开始

点击start后,小球开始进入大球的嘴里,
点击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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值