动态画圆(类似可实现绘制其他图形)

1、效果图



2、自定义view实现
class DynamicDrawView(context: Context) : View(context) {
    private val mPath: Path = Path()
    private val mPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
    private var mPathMeasure: PathMeasure = PathMeasure()
    private var mAnimatorValue: Float = 0.toFloat()
    private val mDstPath: Path = Path()
    private var mLength: Float = 0.toFloat()

    init {
        mPaint.color = Color.RED
        mPaint.style = Paint.Style.STROKE
        mPaint.isAntiAlias = true
        mPaint.strokeWidth = 2F

        mPath.addCircle(Util.Div(900).toFloat(), Util.Div(400).toFloat(), Util.Div(100).toFloat(), Path.Direction.CW) //CW顺时针
        // PathMeasure类似一个计算器,初始化PathMeasure后,可以通过PathMeasure.setPath()的方式来将Path和PathMeasure进行绑定
        mPathMeasure.setPath(mPath, true)
        mLength = mPathMeasure.length

        val mValueAnimator = ValueAnimator.ofFloat(0F, 1F)
        mValueAnimator.addUpdateListener { valueAnimator ->
            mAnimatorValue = valueAnimator.animatedValue as Float
            invalidate()
        }
        mValueAnimator.duration = 8000
        mValueAnimator.repeatCount = ValueAnimator.INFINITE
        mValueAnimator.start()
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        //动态绘制
        val stop = mLength * mAnimatorValue
        val start = 0
        mPathMeasure.getSegment(start.toFloat(), stop, mDstPath, true) //用于截取整个Path的片段
        canvas.drawPath(mDstPath, mPaint)
    }
}
使用:
   DynamicDrawView dynamicDrawView= new DynamicDrawView(getApplicationContext());
   frameLayout.addView(dynamicDrawView);



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值