效果图:

BatteryLevelView 类:

/*** 自定义电池电量*/
class BatteryLevelView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :View(context, attrs, defStyleAttr) {//默认满电private var mPower = 100//充电状态 true:充电 false:未充电private var mIsCharging = false//上下文private val mContext = context//电池颜色private var mPowerColor = Color.YELLOW//防止电量从100闪到实际电量private var mPowerStr = ""override fun onDraw(canvas: Canvas) {super.onDraw(canvas)//电池宽度val width = getDp2px(40f)//电池高度val height = getDp2px(20f)//电池头宽度val headWidth = getDp2px(5f)//电池头高度val headHeight = getDp2px(10f)//圆角val roundX = getDp2px(1f)val roundY = getDp2px(1f)//内边距val margin = getDp2px(1f)//外框val paintBorder = Paint()//外框颜色paintBorder.color = Color.BLACK//抗锯齿paintBorder.isAntiAlias = true//边框paintBorder.strokeWidth = 3fpaintBorder.style = Paint.Style.STROKEval rectF = RectF(0f, 0f, width, height)canvas.drawRoundRect(rectF, roundX, roundY, paintBorder)//文字画笔val textPaint = Paint()textPaint.color = Color.BLACKtextPaint.isAntiAlias = truetextPaint.textSize = 35f//电池电量val powerValues = mPower / 100.0fval paintPower = Paint(paintBorder)paintPower.style = Paint.Style.FILL//低电量val lowerPaint = Paint(paintBorder)lowerPaint.style = Paint.Style.FILLlowerPaint.color = mPowerColorif (mPower < 30) {lowerPaint.color = Color.RED} else {lowerPaint.color = mPowerColor}//画电量if (powerValues != 0f && !mIsCharging) {val right = margin - margin + ((width - margin) * powerValues).toInt()val bottom = margin + height - margin * 2val rect = RectF(margin, margin, right, bottom)//画矩形canvas.drawRoundRect(rect, roundX, roundY, lowerPaint)//画数字canvas.drawText(mPowerStr, roundX + (width / 4), (roundY + (height / 1.5)).toFloat(), textPaint)}//画电池头val top = height / 2 - headHeight / 2val right = width + headWidthval bottom = top + headHeightval rect = Rect(width.toInt(), top.toInt(), right.toInt(), bottom.toInt())canvas.drawRect(rect, paintPower)//在充电中if (mIsCharging) {val rectF = RectF(roundX, roundX, width - roundX, height - roundX)//充电图标【过时写法】建议200x100图片//val drawable = resources.getDrawable(R.drawable.ic_launcher_background)val drawable = ContextCompat.getDrawable(mContext, R.mipmap.batt_img)val bitmapDrawable = drawable as BitmapDrawableval bitmap = bitmapDrawable.bitmapcanvas.drawBitmap(bitmap, null, rectF, paintBorder)}}/*** 设置当前电量*/fun setPower(power: Int) {this.mPower = powerthis.mPowerStr = power.toString()invalidate()}/*** 是否充电中*/fun setCharging(charging: Boolean) {this.mIsCharging = charginginvalidate()}/*** 电池电量颜色*/fun setPowerColor(color: Int) {this.mPowerColor = colorinvalidate()}/*** dp2px*/private fun getDp2px(dpValue: Float): Float {val scale = mContext.resources.displayMetrics.densityreturn dpValue * scale + 0.5f}
}

使用方法:

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//随机电量batterText.setOnClickListener {batterView.setCharging(false)//随机生成0-100电量batterView.setPower((Math.random() * 100).toInt())}//充电中charingText.setOnClickListener {batterView.setCharging(true)}//电池颜色//batterView.setPowerColor(Color.GREEN)}
}

对应布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"><com.example.csdn.BatteryLevelViewandroid:layout_marginTop="20dp"android:id="@+id/batterView"android:layout_width="100dp"android:layout_height="50dp" /><Buttonandroid:id="@+id/batterText"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="随机电量" /><Buttonandroid:id="@+id/charingText"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="充电中" /></LinearLayout>

Android 自定义电量百分比相关推荐

  1. android 获取电量百分比 简书,使用手机不再纠结——隐藏电量百分比

    一周之前,在豌豆荚一览里查看到Appy Geek的一篇文章,其主旨是隐藏电量百分百后生活变得更好了! 文章很短,但是我认为是很长一段时间里我看过的最棒的生活指南之类的文章. 这招只适合像我这种手机狂热 ...

  2. android 获取电量百分比 简书,Android 获取当前电量

    在浏览 Flutter 的示例代码中发现一一个比较好的写法. private int getBatteryLevel() { if (VERSION.SDK_INT >= VERSION_COD ...

  3. Android 自定义 圆环,一步步做Android自定义圆环百分比控件

    马上要校招了,有点儿慌,写个自定义控件压压惊 效果图 本来写了一大串近段时间的感慨,还是觉得废话少说比较不容易被喷,直接上效果图 圆环百分比View.gif 就是这个样子,下面记录一下我的编写经历,撸 ...

  4. Android自定义View之画圆环(手把手教你如何一步步画圆环)

    关于自定义View: 好了,吐槽时间到.自定义view是Android开发知识体系中的重点,也是难点.好多小伙伴(也包括我)之前对自定义view也是似懂非懂.那种感觉老难受了.因此作为社会主义好青年, ...

  5. Android自定义View之画圆环(进阶篇:圆形进度条)

    前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...

  6. Android自定义View之电池电量显示

    自定义简单的电池电量显示.话不多说,直接上代码 package com.kimascend.thermometer.customview; import android.content.Context ...

  7. android 自定义View绘制电池电量(电池内带数字显示)

    最新公司需要一个电池内带数字的显示电池电量需求,百度了一下.参考下面这篇文章写的Android自定义View之电池电量显示. 增加了里面电池电量数字显示,还有就是一个屏幕适配.不管屏幕分辨率基本都能适 ...

  8. android电量百分比,Android P 状态栏显示电量百分比

    状态栏默认显示电量百分比 在Android P 的BatteryMeterView中有集成显示电量百分比相关代码,所以我们只需要将其显示控制条件默认打开就行. 在Settings的Battery的子页 ...

  9. android 10.0状态栏显示电量百分比

    1.概述 在10.0的系统产品开发中,对于系统默认的电池电量是不显示的,所以产品需求要求显示电池电量,方便知道当前电量,方便显示在电量不足的情况下可以及时充电,所以来实现这个功能 2.状态栏显示电量百 ...

最新文章

  1. Linux 内核环境搭建花絮
  2. 怎样使用Mendeley高效地管理中文文献
  3. 【日程发布】LiveVideoStackCon 音视频技术大会 2022 上海站
  4. test of duplicate control id
  5. mysql数据库突然连不上了_mysql数据库突然连接不上去
  6. eleemnt-ui修改主题颜色
  7. gdal1.6linux编译,VS2015下编译64位GDAL总结
  8. python_程序格式_缩进_行注释_段注释---python工作笔记012
  9. 雅虎宣布支持谷歌OpenSocial标准
  10. 2022年6月25日PMP考试通关宝典-5
  11. 华为手机老是自动截屏_华为手机竟然三种截屏方法 然后打开智能截屏开关
  12. 公司老总直接面试 我该如何准备
  13. LCP 03. 机器人大冒险
  14. 彻底搞清Flink中的Window(Flink版本1.8)
  15. Muti-bin的一些相关函数和设置
  16. Cartographer ROS编译安装
  17. 【笔记】信号与线性系统
  18. 中南大学2016考研复试分数线(已公布)
  19. 硬件工程师的真实发展前途是怎么样的?
  20. CSS选择器 first-child nth-child

热门文章

  1. 二维码生成、打印工具类
  2. HbuilderX进行App云打包
  3. 电调控制直流无刷电机
  4. 中文自然语言处理,繁体转简体(下载langconv)
  5. 关于数据同步的几种实现
  6. 通过PWM控制串行LED灯
  7. EMR重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器
  8. C#:Krypton控件使用方法详解(第十讲) ——kryptonColorButton
  9. 浅谈移动通信系统的干扰(转)
  10. 聚合支付态度支付,满足各类支付场景需求