Android自定义电池电量显示组件(kotlin,java)

最近产品研发需求需要显示在线设备的电池电量状态,然后UI给出的效果的图是这样的

Android自定义电池电量显示组件(kotlin,java)_第1张图片

于是就开始了自定义个,因为是项目特定的UI所以很多属性都没有直接抽取到styles里面了,直接上代码(因为项目是使用kotlin的,所以直接用kotlin进行编程了,当然也附带了Java版本的)

kotlin版本(里面用到的颜色值可自定义,这里是使用项目工具类转过来的):

package com.view

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.view.View
import com.blankj.utilcode.util.ColorUtils
import com.blankj.utilcode.util.ImageUtils
import com.view.R

/**
 * @CreateDate: 
 * @Author:lp
 * @Description:
 */
class BatteryView @JvmOverloads constructor(context: Context?, attrs: AttributeSet? = null) :
    View(context, attrs) {

    private val batteryBodyPainter: Paint//电池外边框画笔
    private val batteryHeadPainter: Paint//电池盖画笔
    private val mPowerPaint: Paint//电量画笔

    private val outlineRect: RectF//电池矩形
    private val mCapRect: RectF//电池盖矩形
    private val batteryRect: RectF//电量矩形

    private var fullPowerWidth = 0f //满电量时电池体的宽度。
    private var battery = 20
    private var leftPoint = 0f
    private var topPoint = 0f

    fun setBattery(battery: Int) {
        this.battery = battery
        invalidate()
    }

    fun getBattery(): Int {
        return battery
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        val specWidthSize = MeasureSpec.getSize(widthMeasureSpec) //宽
        val specHeightSize = MeasureSpec.getSize(heightMeasureSpec) //高

        //设置电池外框
        outlineRect.right = specWidthSize - OUTLINE_THICKNESS - CAP_WIDTH
        outlineRect.bottom = specHeightSize - OUTLINE_THICKNESS

        //设置电池盖矩形
        mCapRect.left = outlineRect.right
        mCapRect.top = specHeightSize.toFloat() / 2 - CAP_HEIGHT / 2
        mCapRect.right = specWidthSize.toFloat()
        mCapRect.bottom = specHeightSize.toFloat() / 2 + CAP_HEIGHT / 2

        //设置电池体
        batteryRect.left = outlineRect.left + GAP_OF_SHAPE_BODY
        batteryRect.top = outlineRect.top + GAP_OF_SHAPE_BODY
        batteryRect.bottom = outlineRect.bottom - GAP_OF_SHAPE_BODY

        //闪电位置
        leftPoint = specWidthSize / 2 

你可能感兴趣的:(AndroidUI控件,kotlin,java,android,kotlin,java,电池电量显示,电量显示)