好久没有发帖子了 用代码绘制了一个电池, 没有用到任何图片, 可以自用控制 其大小等网上找了一个但是效果 不好, 就自己实现了一个:CopyOfBatterView是原作者的 您可以对比一下
直接上demo了.
[mw_shl_code=java,true]package com.example.batterydemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class BatteryView extends View {
private float mPower = 0f;
private float mBatteryStroke = 2f;
private float mBatteryHeight = 30f; // 电池的高度
private float mBatteryWidth = 60f; // 电池的宽度
private float mCapHeight = 15f;
private float mCapWidth = 5f;
private float mPowerPadding = 1;
private float mPowerHeight = mBatteryHeight - mBatteryStroke - mPowerPadding * 2; // 电池身体的高度
private float mPowerWidth = mBatteryWidth - mBatteryStroke - mPowerPadding * 2;// 电池身体的总宽度
private Paint mPaint;
private RectF mBatteryRect;
private RectF mCapRect;
private RectF mPowerRect;
public BatteryView(Context context) {
super(context);
}
public BatteryView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setColor(Color.GRAY);
mPaint.setAntiAlias(true);
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(mBatteryStroke);
mBatteryRect = new RectF(mCapWidth, 0, mBatteryWidth, mBatteryHeight);
mCapRect = new RectF(
0,
(mBatteryHeight - mCapHeight) /2,
mCapWidth,
(mBatteryHeight - mCapHeight ) /2 + mCapHeight);
mPowerRect = new RectF(
mCapWidth + mBatteryStroke / 2 + mPowerPadding + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
mBatteryWidth - mPowerPadding * 2,
mBatteryStroke / 2 + mPowerPadding + mPowerHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mBatteryStroke, mBatteryStroke);
mPaint.setStyle(Style.STROKE);
canvas.drawRoundRect(mBatteryRect, 2f , 2f, mPaint); // 需要考虑 画笔的宽度 注意他下面不用考虑
mPaint.setStyle(Style.FILL);
canvas.drawRoundRect(mCapRect, 2f , 2f, mPaint);
canvas.drawRect(mPowerRect, mPaint);
canvas.restore();
}
public void setPower(float power) {
mPower = power;
if (mPower < 0) {
mPower = 0;
}
mPowerRect = new RectF(
mCapWidth + mBatteryStroke / 2 + mPowerPadding + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
mBatteryWidth - mPowerPadding * 2,
mBatteryStroke / 2 + mPowerPadding + mPowerHeight);
invalidate();
}
}
直接上demo了.
[mw_shl_code=java,true]package com.example.batterydemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class BatteryView extends View {
private float mPower = 0f;
private float mBatteryStroke = 2f;
private float mBatteryHeight = 30f; // 电池的高度
private float mBatteryWidth = 60f; // 电池的宽度
private float mCapHeight = 15f;
private float mCapWidth = 5f;
private float mPowerPadding = 1;
private float mPowerHeight = mBatteryHeight - mBatteryStroke - mPowerPadding * 2; // 电池身体的高度
private float mPowerWidth = mBatteryWidth - mBatteryStroke - mPowerPadding * 2;// 电池身体的总宽度
private Paint mPaint;
private RectF mBatteryRect;
private RectF mCapRect;
private RectF mPowerRect;
public BatteryView(Context context) {
super(context);
}
public BatteryView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setColor(Color.GRAY);
mPaint.setAntiAlias(true);
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(mBatteryStroke);
mBatteryRect = new RectF(mCapWidth, 0, mBatteryWidth, mBatteryHeight);
mCapRect = new RectF(
0,
(mBatteryHeight - mCapHeight) /2,
mCapWidth,
(mBatteryHeight - mCapHeight ) /2 + mCapHeight);
mPowerRect = new RectF(
mCapWidth + mBatteryStroke / 2 + mPowerPadding + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
mBatteryWidth - mPowerPadding * 2,
mBatteryStroke / 2 + mPowerPadding + mPowerHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mBatteryStroke, mBatteryStroke);
mPaint.setStyle(Style.STROKE);
canvas.drawRoundRect(mBatteryRect, 2f , 2f, mPaint); // 需要考虑 画笔的宽度 注意他下面不用考虑
mPaint.setStyle(Style.FILL);
canvas.drawRoundRect(mCapRect, 2f , 2f, mPaint);
canvas.drawRect(mPowerRect, mPaint);
canvas.restore();
}
public void setPower(float power) {
mPower = power;
if (mPower < 0) {
mPower = 0;
}
mPowerRect = new RectF(
mCapWidth + mBatteryStroke / 2 + mPowerPadding + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
mBatteryWidth - mPowerPadding * 2,
mBatteryStroke / 2 + mPowerPadding + mPowerHeight);
invalidate();
}
}
[/mw_shl_code]