一个功能丰富的 Android 自定义电池视图控件,支持水平和垂直两种方向,提供完整的电池状态展示和自定义功能。
- 🔋 支持水平/垂直两种方向
- 📊 实时显示电池电量百分比
- 🎨 根据电量自动变色(红/黄/绿)
- ⚡ 充电动画效果
- 🔄 充电循环动画(0-100%)
- 🎨 渐变填充:支持横向/纵向渐变,自定义起始色和结束色
- 💫 低电量闪烁:电量低于阈值时闪烁提醒
- 📳 低电量震动:电量低于阈值时震动提醒
- 🎯 电量平滑过渡:电量变化时平滑动画
-
🎭 电池身设置
- 边框颜色
- 圆角半径(0-32dp,独立控制)
- 边框宽度(0-12dp)
-
🔋 电池头设置
- 电池头颜色(独立于边框颜色)
- 电池头圆角半径(0-32dp,独立控制)
- 电池头比例(0.2-0.8)
- 电池头紧贴设计:贴近电池身的边为直角,远离的边使用圆角,实现无缝贴合
- 📝 百分比文字大小
- 🎨 百分比文字颜色
- 📍 百分比文字位置(居中/顶部/底部/左侧/右侧)
电池头与电池身无缝贴合,贴近电池身的边为直角,远离的边使用圆角
- 电池身和电池头可以设置不同的圆角半径
- 支持更丰富的视觉效果组合
- 向后兼容旧的
batteryCornerRadius属性
- 0→100% 单向循环(3秒周期)
- 平滑的电量过渡动画
- 可独立控制是否启用
- 闪烁提醒:电量低于阈值时自动闪烁
- 震动提醒:电量低于阈值时震动(需权限)
- 可自定义低电量阈值
应用提供了完整的演示界面,包含:
- 实时电量调节
- 6个功能设置弹窗(电量、基础、文本、渐变、尺寸、外观)
- 实时预览效果
- 一键重置功能
- 水平和垂直电池同步显示
<com.donkor.demo.BatteryView
android:id="@+id/batteryView"
android:layout_width="60dp"
android:layout_height="120dp"
app:batteryOrientation="vertical"
app:batteryPower="75"
app:batteryShowPercent="true"
app:batteryPercentPosition="center"
app:batteryCharging="false"
app:batteryBodyCornerRadius="8dp"
app:batteryHeadCornerRadius="8dp"
app:batteryBorderWidth="2dp"
app:batteryBorderColor="#000000"
app:batteryHeadColor="#000000"
app:batteryHeadScale="0.5"
app:batteryGradientEnabled="true"
app:batteryGradientVertical="true"
app:batteryAnimatePower="true"
app:batteryLowBlink="true"
app:batteryVibrateOnLow="true"/>val batteryView = findViewById<BatteryView>(R.id.batteryView)
// 基础设置
batteryView.setPower(75) // 设置电量
batteryView.setCharging(true) // 设置充电状态
batteryView.setChargingCycle(true) // 设置充电循环动画
// 外观设置 - 电池身
batteryView.setBodyCornerRadius(16f) // 设置电池身圆角(像素)
batteryView.setBorderWidth(4f) // 设置边框宽度(像素)
batteryView.setBorderColor(Color.BLACK) // 设置边框颜色
// 外观设置 - 电池头
batteryView.setHeadCornerRadius(8f) // 设置电池头圆角(像素)
batteryView.setHeadColor(Color.RED) // 设置电池头颜色
batteryView.setHeadScale(0.6f) // 设置电池头比例
// 渐变设置
batteryView.setGradientEnabled(true) // 启用渐变
batteryView.setGradientVertical(true) // 设置垂直渐变
batteryView.setGradientColors(Color.GREEN, Color.YELLOW) // 设置渐变颜色
// 文本设置
batteryView.setShowPercent(true) // 显示百分比
batteryView.setPercentSize(14f * density) // 设置文字大小(像素)
batteryView.setPercentColor(Color.WHITE) // 设置文字颜色
batteryView.setPercentPosition(0) // 设置文字位置(0=居中)
// 低电量提醒
batteryView.setLowBlink(true) // 启用低电量闪烁
batteryView.setVibrateOnLow(true) // 启用低电量震动
// 动画设置
batteryView.setAnimatePower(true) // 启用电量平滑过渡| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryOrientation |
enum | 电池方向(horizontal/vertical) | horizontal |
batteryPower |
integer | 电池电量(0-100) | 100 |
batteryColor |
color | 基础颜色 | - |
batteryCharging |
boolean | 是否充电 | false |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryShowPercent |
boolean | 是否显示百分比 | false |
batteryPercentColor |
color | 百分比文字颜色 | BLACK |
batteryPercentSize |
dimension | 百分比文字大小 | 12sp |
batteryPercentPosition |
enum | 百分比位置(center/top/bottom/start/end) | center |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryCornerRadius |
dimension | 圆角半径(同时设置电池身和电池头) | 3dp |
batteryBodyCornerRadius |
dimension | 电池身圆角半径 | 3dp |
batteryBorderWidth |
dimension | 边框宽度 | 2dp |
batteryBorderColor |
color | 边框颜色 | BLACK |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryHeadCornerRadius |
dimension | 电池头圆角半径 | 3dp |
batteryHeadScale |
float | 电池头比例(0.2-0.8) | 0.5 |
batteryHeadColor |
color | 电池头颜色 | BLACK |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryGradientEnabled |
boolean | 是否启用渐变 | false |
batteryGradientStartColor |
color | 渐变起始颜色 | GREEN |
batteryGradientEndColor |
color | 渐变结束颜色 | YELLOW |
batteryGradientVertical |
boolean | 是否垂直渐变 | false |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryLowThreshold |
integer | 低电量阈值(0-100) | 20 |
batteryLowBlink |
boolean | 低电量闪烁 | false |
batteryVibrateOnLow |
boolean | 低电量震动 | false |
| 属性 | 类型 | 说明 | 默认值 |
|---|---|---|---|
batteryAnimatePower |
boolean | 电量平滑过渡 | false |
setPower(power: Int) // 设置电量(0-100)
getPower(): Int // 获取当前电量
setAnimatePower(enable: Boolean) // 设置电量平滑过渡动画setCharging(charging: Boolean) // 设置充电状态
setChargingCycle(enable: Boolean) // 设置充电循环动画(0-100%循环)setBodyCornerRadius(radiusPx: Float) // 设置电池身圆角(像素)
setCornerRadius(radiusPx: Float) // 同时设置电池身和电池头圆角(像素)
setBorderWidth(widthPx: Float) // 设置边框宽度(像素)
setBorderColor(color: Int) // 设置边框颜色setHeadCornerRadius(radiusPx: Float) // 设置电池头圆角(像素)
setHeadColor(color: Int) // 设置电池头颜色
setHeadScale(scale: Float) // 设置电池头比例(0.2-0.8)setGradientEnabled(enabled: Boolean) // 启用/禁用渐变填充
setGradientVertical(vertical: Boolean) // 设置渐变方向(true=垂直,false=横向)
setGradientColors(start: Int, end: Int) // 设置渐变起始色和结束色setShowPercent(show: Boolean) // 显示/隐藏百分比文字
setPercentSize(sizePx: Float) // 设置文字大小(像素)
setPercentColor(color: Int) // 设置文字颜色
setPercentPosition(position: Int) // 设置文字位置(0=居中,1=顶部,2=底部,3=左侧,4=右侧)setLowBlink(enabled: Boolean) // 启用/禁用低电量闪烁
setVibrateOnLow(enabled: Boolean) // 启用/禁用低电量震动
setLowThreshold(threshold: Int) // 设置低电量阈值(0-100)<com.donkor.demo.BatteryView
android:id="@+id/batteryView"
android:layout_width="60dp"
android:layout_height="30dp"
app:batteryOrientation="horizontal"
app:batteryPower="75"
app:batteryShowPercent="true"/><com.donkor.demo.BatteryView
android:id="@+id/batteryView"
android:layout_width="60dp"
android:layout_height="120dp"
app:batteryOrientation="vertical"
app:batteryPower="50"
app:batteryCharging="true"
app:batteryGradientEnabled="true"
app:batteryGradientVertical="true"
app:batteryGradientStartColor="#4CAF50"
app:batteryGradientEndColor="#FFC107"/><com.donkor.demo.BatteryView
android:id="@+id/batteryView"
android:layout_width="80dp"
android:layout_height="40dp"
app:batteryOrientation="horizontal"
app:batteryPower="30"
app:batteryBodyCornerRadius="12dp"
app:batteryHeadCornerRadius="6dp"
app:batteryBorderWidth="3dp"
app:batteryBorderColor="#FF5722"
app:batteryHeadColor="#FF5722"
app:batteryHeadScale="0.6"
app:batteryShowPercent="true"
app:batteryPercentColor="#FFFFFF"
app:batteryPercentSize="14sp"/>val batteryView = findViewById<BatteryView>(R.id.batteryView)
batteryView.apply {
setPower(15) // 低电量
setLowBlink(true) // 启用闪烁
setVibrateOnLow(true) // 启用震动
setLowThreshold(20) // 低于20%触发
setShowPercent(true)
setPercentColor(Color.RED)
}val batteryView = findViewById<BatteryView>(R.id.batteryView)
batteryView.apply {
setCharging(true) // 启用充电
setChargingCycle(true) // 启用循环动画(0-100%)
setAnimatePower(true) // 平滑过渡
setGradientEnabled(true) // 渐变效果
}- 语言:Kotlin
- 最低 SDK:21 (Android 5.0)
- 目标 SDK:35 (Android 15)
- 构建工具:Gradle 8.3.2
batteryView.setBodyCornerRadius(16f) // 电池身大圆角
batteryView.setHeadCornerRadius(4f) // 电池头小圆角batteryView.setBorderColor(Color.BLACK) // 电池身边框黑色
batteryView.setHeadColor(Color.RED) // 电池头红色启用充电循环动画后,电量会从0%平滑上升到100%,然后立即跳回0%,周期为3秒:
batteryView.setCharging(true) // 启用充电
batteryView.setChargingCycle(true) // 启用循环动画batteryView.setLowThreshold(15) // 设置低电量阈值为15%
batteryView.setLowBlink(true) // 启用闪烁
batteryView.setVibrateOnLow(true) // 启用震动// 横向渐变(从左到右或从上到下)
batteryView.setGradientVertical(false)
// 纵向渐变(从下到上或从右到左)
batteryView.setGradientVertical(true)使用 batteryCornerRadius 会同时设置两者:
app:batteryCornerRadius="8dp"或者分别设置:
app:batteryBodyCornerRadius="12dp"
app:batteryHeadCornerRadius="6dp"启用后,调用 setPower() 时电量会平滑过渡到目标值,而不是立即跳变:
batteryView.setAnimatePower(true)
batteryView.setPower(80) // 从当前电量平滑过渡到80%Copyright 2025 Donkor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Donkor
⭐ 如果这个项目对你有帮助,请给个 Star!






