您的位置:首页 > 编程语言

使用代码绘制一个电池 (非图片)

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: