Kotlin系列——带弧形的进度条

本文介绍了使用Kotlin重写优化的带弧形进度条控件CircularArcProgressView,详细讲解了其属性、使用方法及源码分析,包括PorterDuff.Mode的原理和Lazy属性的延迟加载机制。
摘要由CSDN通过智能技术生成

本文章已授权微信公众号郭霖(guolin_blog)转载。

这是一个带弧形的进度条,其实这个控件很久之前已经实现了,但是我想用Kotlin去重写优化一遍,并且对此铺开来讲解。

项目GitHub:CircularArcProgressView

效果图

在这里插入图片描述

属性

Name Format Description
capv_background_color color 背景颜色
capv_progress_color color 进度条颜色
capv_progress_text_color color 进度文本颜色
capv_percent float 百分比
capv_is_show_progress_text boolean 是否显示进度文本

使用

导入你的项目中

dependencies {
    implementation 'com.tanjiajun.widget:CircularArcProgressView:1.0.2'
}

布局文件

<com.tanjiajun.widget.CircularArcProgressView
    android:id="@+id/capv_first"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    app:capv_background_color="@color/circular_arc_progress_view_first_background_color"
    app:capv_is_show_progress_text="true"
    app:capv_percent="0.8"
    app:capv_progress_color="@color/circular_arc_progress_view_first_progress_color"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Kotlin

findViewById<CircularArcProgressView>(R.id.capv_first).startAnimator(duration = 2000)

Java

((CircularArcProgressView) findViewById(R.id.capv_first)).startAnimator(2000);

源码分析

定义自定义属性,据此写出对应的获取自定义属性的代码,并且暴露一些需要用户设置的方法,代码如下:

/**
 * Set percent to show the progress.
 */
var percent: Float = 0f
    set(value) {
   
        var percent = value

        if (percent < 0f) {
   
            percent = 0f
        } else if (percent > 1f) {
   
            percent = 1f
        }

        if (percent != field) {
   
            field = percent
            invalidate()
        }
    }

init {
   
    attrs?.let
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值