使用代码绘制一个电池 (非图片)
2015-06-04 16:05
295 查看
好久没有发帖子了 用代码绘制了一个电池, 没有用到任何图片, 可以自用控制 其大小等网上找了一个但是效果 不好, 就自己实现了一个: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();
}
}
[/mw_shl_code]
直接上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]
相关文章推荐
- php的类型转换
- C#Graphics类绘制直线与拖动
- c++ containers
- Python获取系统默认字符编码的方法
- springmvc常用的组件,注解,跳转
- java获取给定时区时间,中国标准时.格林威治时间
- <PY><NumPy><SciPy>图像翻转切割遮罩
- PHP中防XSS攻击和防sql注入
- SpringMVC 学习笔记(五) 基于RESTful的CRUD
- C#进度轴控件分享
- php中会话机制相关问题
- 【C语言/算法之 01 背包】基础版
- c/c++字符串传递
- Python Knowledge
- eclipse中开机优化1
- C# tostring 格式化输出
- 第二章 Spring MVC入门
- Asp.net中web.config配置文件详解
- java学习
- c++函数