最新公司需要一个电池内带数字的显示电池电量需求,百度了一下。参考下面这篇文章写的Android自定义View之电池电量显示。

增加了里面电池电量数字显示,还有就是一个屏幕适配。不管屏幕分辨率基本都能适配。直接上代码吧。

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;public class DrawView1 extends View {private float percent = 0f;// 电池电量外面的大白框Paint paint = new Paint();// 电池电量里面的绿色Paint paint1 = new Paint();// 电池头部Paint paint2 = new Paint();public DrawView(Context context, AttributeSet set) {super(context, set);// 去锯齿paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL);paint1.setAntiAlias(true);paint1.setStyle(Paint.Style.STROKE);paint1.setStrokeWidth(dip2px(1.5f));paint1.setColor(Color.BLACK);paint2.setAntiAlias(true);paint2.setStyle(Paint.Style.FILL);paint2.setColor(Color.BLACK);DisplayMetrics dm = getResources().getDisplayMetrics();int mScreenWidth = dm.widthPixels;int mScreenHeight = dm.heightPixels;//以分辨率为720*1080准,计算宽高比值float ratioWidth = (float) mScreenWidth / 720;float ratioHeight = (float) mScreenHeight / 1080;float ratioMetrics = Math.min(ratioWidth, ratioHeight);int textSize = Math.round(20 * ratioMetrics);paint2.setTextSize(textSize);}private int dip2px(float dpValue) {final float scale = getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}@SuppressLint("DrawAllocation")@Override// 重写该方法,进行绘图protected void onDraw(Canvas canvas) {super.onDraw(canvas);// 大于百分之30时绿色,否则为红色if (percent > 0.3f) {paint.setColor(Color.GREEN);} else {paint.setColor(Color.RED);}int a = getWidth() - dip2px(2f);int b = getHeight() - dip2px(1.5f);// 根据电量百分比画图float d = a * percent;float left = dip2px(0.5f);float top = dip2px(0.5f);float right = dip2px(2.5f);float bottom = dip2px(1.5f);RectF re1 = new RectF(left, top, d - right, b + bottom); //电量填充RectF re2 = new RectF(0, 0, a - right, b + bottom); //电池边框RectF re3 = new RectF(a - right, b / 5, a, b + bottom - b / 5);  //电池正极// 绘制圆角矩形canvas.drawRect(re1, paint);canvas.drawRect(re2, paint1);canvas.drawRect(re3, paint2);//文字的起点为(getWidth()/2,getHeight()/2)canvas.drawText(String.valueOf((int) (percent * 100)), getWidth() / 3 - dip2px(3), getHeight() - getHeight() / 4, paint2);}// 每次检测电量都重绘,在检测电量的地方调用public synchronized void setProgress(int percent) {this.percent = (float) (percent / 100.0);postInvalidate();}
}

图片显示效果:

是截图不大清晰,凑合点看吧

android 自定义View绘制电池电量(电池内带数字显示)相关推荐

  1. Android自定义View绘制闹钟

    Android自定义View绘制闹钟 本文简单实现了一个闹钟,扩展View,Canvas绘制 效果如下: 代码如下: package com.gaofeng.mobile.clock_demo;imp ...

  2. android自定义弧度按钮,Android 自定义View 绘制六边形设置按钮

    今天逛酷安的时候,发现酷安的设置按钮(截图的右上角),是一个六边形 + 中心圆的图标,所以又是一个自定义View练习对象了.画圆很简单,知道半径即可,而重点就在画出六边形. 酷安截图.png 最终效果 ...

  3. Android 自定义View绘制电池图标

    /*** @anthor GrainRain* @funcation 自定义View绘制电池* @date 2019/8/27*/ public class DrawBatteryView exten ...

  4. Android自定义View绘制流程

    Android视图层次结构简介 在介绍View绘制流程之前,咱们先简单介绍一下Android视图层次结构以及DecorView,因为View的绘制流程的入口和DecorView有着密切的联系. 我们平 ...

  5. android画a4矩形,Android自定义View绘制原理:画多大?画在哪?画什么?(三)

    View绘制就好比画画,抛开Android概念,如果要画一张图,首先会想到哪几个基本问题: 画多大? 画在哪? 怎么画? Android绘制系统也是按照这个思路对View进行绘制,上面这些问题的答案分 ...

  6. Android自定义View绘制闪闪发光的文字

    如何实现类似网页效果中闪闪发光的文字,通过自定义View可以实现这一炫酷效果 1.自定义View public class FlickTextView extends TextView {privat ...

  7. Android 自定义View绘制的基本开发流程 Android自定义View(二)

    1 View绘制的过程 View的测量--onMeasure() View的位置确定--onLayout() View的绘制--onDraw() 2 View的测量--onMeasure() Andr ...

  8. Android 自定义View 绘制五角星

    背景 之前写过的App里有评分的功能,而显示评分一般使用系统的RatingBar再加自定义,一切都很完美,但是产品提了一个需求,例如4.6.4.7.5.8分,不要显示为4个星星加一个半星(4.5分), ...

  9. Android 自定义View 绘制正N边形

    从我的 "慕课-手记" 中搬过来   作者: stone86  链接:http://www.imooc.com/article/14599 来源:慕课网 支付宝芝麻信用分-分析中, ...

最新文章

  1. Windows数据类型探幽——千回百转你是谁?(1)
  2. 5.5 SVM补充-机器学习笔记-斯坦福吴恩达教授
  3. spring源码分析之@Conditional
  4. 面向对象的三大特征继承,封装和多态性
  5. jQuery 3.4.0 Released(2019.4.10)
  6. oracle 如何创建job,oracle创建job
  7. 分类学计算机面试什么,史上最全的机器学习面试题-机器学习爱好者必看
  8. jquery html 动态添加元素绑定事件
  9. HTML基础——HTML
  10. 视觉SLAM和激光SLAM的实现
  11. 共同创业五年,技术总监却突然就这么离职了
  12. 前端接收java后端返回base64二进制流下载mp4
  13. 延缓青少年近视进展的新方案
  14. Mysql 主从间延迟,主从切换策略
  15. 六轴多关节机器人跟四轴机器人差别在哪里呢
  16. Python常用模块os——与操作系统交互
  17. 批量修改文件名 大量文件名称一键替换文字
  18. 小程序里面,view button组件设置display为inline-block,会上下错开
  19. leanote蚂蚁笔记 私人云笔记服务搭建
  20. Reaktor 6 for Mac(音乐合成器软件)v6.3.0永久激活版

热门文章

  1. css 随着屏幕大小字体随之变化
  2. CSPM CWPP CNAPP
  3. 基于EfficientDet的医学图像检测(肺炎、肺结节、肺结核等)(VOC2007)
  4. samtools用法详解
  5. python开发工具排名-5个最好用的Python编程开发工具(IDE)分享
  6. 【23考研】计算机择校信息库-湖北高校计算机相关专业22专业目录分类汇总(按专业课分类汇总)
  7. 如何运营自己的跑腿系统呢?同城跑腿怎么选择?
  8. 大型数据库复习笔记——PL/SQL
  9. kaldi nnet3模型对单一语音文件在线解码
  10. 国外最漂亮的50个网站欣赏