Android自定义View——电池

本文介绍了如何在Android中创建一个自定义的BatteryView,以满足从1%到100%电量的精确显示,以及不同电量状态下的颜色变化、边框配置和方向选择等需求。通过继承View,重写onDraw方法,实现电池图形的绘制。同时,文章提到了在实现过程中需要注意的细节,如考虑padding、文字居中和自定义属性等,并提供了相关的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android自定义View——电池

概述

最近的工作中有一个需求,需要显示电量,产品说前面的开发已经做了,就在另一个项目里,复制过来就好了。行,那就复制呗,结果一看,真是惊呆了,用的是一个layer-list的drawable,里面就11种状态,从0到100%。如果要显示11%呢,怎么办?好吧,这种坑已经见怪不怪了,相对于其它坑,这算不上问题,填坑吧。

电池View的需求

  1. 图形显示1%到100%的电量;
  2. 数字显示1-100,可配置;
  3. 电池低电量,电量充足,充电时显示不同的颜色;
  4. 可以设置电池外边框的颜色和stroke大小;
  5. 可以选择横向显示或者纵向显示

自定义View

通过继承View自定义一个BatteryView实现这个电池View的需求。自定义View的概念可以参考这篇博客,已经写得非常清楚了。自定义View可以分为四类:

  1. 自定义组合控件,如自定义公共的ActionBar;
  2. 继承系统提供的特定的View,ViewGroup,如TextView,LinearLayout;
  3. 继承 android.view.View 实现自己的View
  4. 继承 android.view.ViewGroup 实现自己的ViewGroup。

关于自定义View的知识,这里就不详细描述了,要实现自定义电池View的需求,可以选择第三种,继承 android.view.View,重写onDraw,并在这个方法中绘制电池的需求。

BatteryView 实现

为了提高效率,在这篇博客Android 自定义电池控件的基础上进行修改(考虑了padding和增加了几个属性)。实现步骤如下:

  1. 新建attrs.xml定义属性文件,并增加BatteryView的属性;
  2. 继承View,实现BatteryView;
  3. 在构造函数中解析各个属性;
  4. 重写onDraw,根据属性绘制电池的外轮廓,电池电量,电池帽子以及电量百分比。

比较简单,直接贴上代码:

  1. attrs.xml
    <declare-styleable name="Battery">
        <attr name="batteryOrientation">
            <enum name="horizontal" value="0"/>
            <enum name="vertical" value="1"/>
        </attr>
        <attr name="batteryColor" format="color"/> <!-- 电池边框的颜色 -->
        <attr name="batteryStrokeWidth" format="dimension" /> <!-- 电池边框的宽度 -->
        <attr name="batteryLowBatteryColor" format="color" /> <!-- 低电量时,如低于20% -->
        <attr name="batteryHealthBatteryColor" format="color" /> <!-- 电量相对较少,但是还算健康,如高于20% -->
        <attr name="batteryHappyBatteryColor" format="color" />  <!-- 电量较多时,如多于50%-->
        <attr name="batteryChargingColor" format="color" /> <!-- 充电中的颜色 -->
        <attr name="batteryPower" format="integer"/>
        <attr name="batteryShowPercent" format="boolean" />  <!-- 是否显示百分比数字 -->
        <attr name="batteryPercentColor" format="color"/> <!-- 电池百分比的文字颜色 -->
        <attr name="batteryPercentSize" format="dimension" /> <!-- 电池百分比的文字大小 -->

    </declare-styleable>
  1. BatteryView.java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.Dimension;
import androidx.annotation.IntDef;

import com.bottle.app.R;
import com.bottle.app.device.DisplayUtil;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * 自定义水平\垂直电池控件
 */
public class BatteryView extends View {
   

    public static final int HORIZONTAL = 0;
    public static final int VERTICAL = 1;

    @Retention
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值