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

Posted mmsx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 自定义View绘制电池电量(电池内带数字显示)相关的知识,希望对你有一定的参考价值。

最新公司需要一个电池内带数字的显示电池电量需求,百度了一下。参考下面这篇文章写的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绘制电池电量(电池内带数字显示)的主要内容,如果未能解决你的问题,请参考以下文章

Android:当电池电量处于定义水平时做某事

Android 怎样控制电量百分比是不是显示

在android中自动更新电池电量

Android 通过清单访问电池统计信息或监控电池电量

如何在android中获取电池电量变化(仅当有电量/百分比变化时)?

如何在 Android 的后台监控电池电量?