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

本文介绍了如何根据产品需求创建一个自定义的Android电量显示组件,提供了kotlin和Java两种实现方式,并展示了如何在布局文件中使用该组件以及设置电量。代码中包含电量低于20%时显示红色闪电的特性,当设备离线时电量显示为灰色。
摘要由CSDN通过智能技术生成

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

于是就开始了自定义个,因为是项目特定的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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值