直接上代码
import android.animation.Animator import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.content.Context import android.graphics.* import android.os.Build import android.util.AttributeSet import android.util.Property import android.view.View import androidx.annotation.RequiresApi import java.math.RoundingMode import java.text.DecimalFormat /** * 温度计 * @author WangYL * @Date 2021 */ class ThermometerView : View { private var mContext: Context private var mHeight: Int = 0 private var mWidth: Int = 0 // 最终的大小 private var mSize: Int = 0 // 试管底部的圆大小 private var reagentWidth: Float = 70f //内边距(默认固定死) private var padding: Float = 15f private var srcBitmap: Bitmap? = null private var srcCanvas: Canvas? = null private var dstBitmap: Bitmap? = null private var dstCanvas: Canvas? = null private var mRectF: RectF? = null //定义PorterDuffXfermode变量 private val pdXfermode: PorterDuffXfermode by lazy { //创建一个PorterDuffXfermode对象 PorterDuffXfermode(PD_MODE) } //定义MODE常量,等下直接改这里即可进行测试 private val PD_MODE = PorterDuff.Mode.SRC_ATOP /** * 默认画笔 */ private val mPaint: Paint = Paint().apply { style = Paint.Style.FILL textSize isAntiAlias = true } /** * 文字画笔 */ private val textPaint: Paint = Paint().apply { style = Paint.Style.FILL val density: Float = resources.displayMetrics.density textSize = density * 13 color = Color.parseColor("#333333") isAntiAlias = true } /** * 刻度画笔 */ private val progresPaint: Paint = Paint().apply { style = Paint.Style.FILL color = Color.parseColor("#F0875C") isAntiAlias = true } /** * 当前温度 */ private var currenTemp = 35 - 0.1f private var maxTemp: Float = 41f private var minTemp: Float = 35f private var scaleCount = 80 constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( context, attrs, defStyleAttr ) { this.mContext = context reagentWidth