首先看一下效果图,
下面看代码:
/**
*
*/
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.RectF;
import android.util.AttributeSet;
import android.view.View;
/**
* @author kince
* @category 自定义View电池
* @time 2014.2.13
* @qq 543781062
*
*/
public class BatteryView extends View {
/**
* 画笔信息
*/
private Paint mBatteryPaint;
private Paint mPowerPaint;
private float mBatteryStroke = 2f;
/**
* 屏幕高宽
*/
private int measureWidth;
private int measureHeigth;
/**
*
* 电池参数
*/
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 float mPower = 0f;
/**
*
* 矩形
*/
private RectF mBatteryRect;
private RectF mCapRect;
private RectF mPowerRect;
public BatteryView(Context context) {
super(context);
initView();
}
public BatteryView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public BatteryView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
public void initView() {
/**
* 设置电池画笔
*/
mBatteryPaint = new Paint();
mBatteryPaint.setColor(Color.GRAY);
mBatteryPaint.setAntiAlias(true);
mBatteryPaint.setStyle(Style.STROKE);
mBatteryPaint.setStrokeWidth(mBatteryStroke);
/**
* 设置电量画笔
*/
mPowerPaint = new Paint();
mPowerPaint.setColor(Color.RED);
mPowerPaint.setAntiAlias(true);
mPowerPaint.setStyle(Style.FILL);
mPowerPaint.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(measureWidth / 2, measureHeigth / 2);
canvas.drawRoundRect(mBatteryRect, 2f, 2f, mBatteryPaint); // 画电池轮廓需要考虑 画笔的宽度
canvas.drawRoundRect(mCapRect, 2f, 2f, mBatteryPaint);// 画电池盖
canvas.drawRect(mPowerRect, mPowerPaint);// 画电量
canvas.restore();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
measureWidth = MeasureSpec.getSize(widthMeasureSpec);
measureHeigth = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(measureWidth, measureHeigth);
}
/**]
* @category 设置电池电量
* @param power
*/
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();
}
}
代码已经注释得比较清楚了,大家自己看吧,不懂的方法可以去看一下api。