diff --git a/src/com/hippo/ehviewer/drawable/BatteryDrawable.java b/src/com/hippo/ehviewer/drawable/BatteryDrawable.java index 91d47d29c..a4d52db1f 100644 --- a/src/com/hippo/ehviewer/drawable/BatteryDrawable.java +++ b/src/com/hippo/ehviewer/drawable/BatteryDrawable.java @@ -36,21 +36,23 @@ public class BatteryDrawable extends Drawable { private int mColor = Color.WHITE; private int mWarnColor = Color.RED; private int mElect = -1; - private final Paint mBoundPaint; - private final Paint mBodyPaint; + private final Paint mPaint; - private final Rect mBoundRect; + private final Rect mTopRect; + private final Rect mBottomRect; + private final Rect mRightRect; private final Rect mHeadRect; private final Rect mElectRect; private int mStart; private int mStop; public BatteryDrawable() { - mBoundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mBoundPaint.setStyle(Paint.Style.STROKE); - mBodyPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mBodyPaint.setStyle(Paint.Style.FILL); - mBoundRect = new Rect(); + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + mPaint.setStyle(Paint.Style.FILL); + + mTopRect = new Rect(); + mBottomRect = new Rect(); + mRightRect = new Rect(); mHeadRect = new Rect(); mElectRect = new Rect(); updatePaint(); @@ -61,18 +63,30 @@ public class BatteryDrawable extends Drawable { int width = bounds.width(); int height = bounds.height(); int strokeWidth = (int) (Math.sqrt(width * width + height * height) * 0.06f); - int halfStrokeWidth = strokeWidth / 2; int turn1 = width * 6 / 7; int turn2 = height / 3; + int secBottom = height - strokeWidth; mStart = strokeWidth; mStop = turn1 - strokeWidth; - mBoundPaint.setStrokeWidth(strokeWidth); - mBoundRect.set(halfStrokeWidth, halfStrokeWidth, turn1 - halfStrokeWidth, height - halfStrokeWidth); + mTopRect.set(0, 0, turn1, strokeWidth); + mBottomRect.set(0, secBottom, turn1, height); + mRightRect.set(turn1 - strokeWidth, strokeWidth, turn1, secBottom); mHeadRect.set(turn1, turn2, width, height - turn2); - mElectRect.set(mStart, strokeWidth, mStop, height - strokeWidth); + mElectRect.set(0, strokeWidth, mStop, secBottom); } + /** + * How to draw:
+ * |------------------------------|
+ * |\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|
+ * |------------------------------|---|
+ * |/////////////////| |//|\\\|
+ * |/////////////////| |//|\\\|
+ * |------------------------------|---|
+ * |\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\|
+ * |------------------------------| + */ @Override public void draw(Canvas canvas) { if (mElect == -1) @@ -80,9 +94,11 @@ public class BatteryDrawable extends Drawable { mElectRect.right = MathUtils.lerp(mStart, mStop, mElect / 100.0f); - canvas.drawRect(mBoundRect, mBoundPaint); - canvas.drawRect(mHeadRect, mBodyPaint); - canvas.drawRect(mElectRect, mBodyPaint); + canvas.drawRect(mTopRect, mPaint); + canvas.drawRect(mBottomRect, mPaint); + canvas.drawRect(mRightRect, mPaint); + canvas.drawRect(mHeadRect, mPaint); + canvas.drawRect(mElectRect, mPaint); } private boolean isWarn() { @@ -95,8 +111,7 @@ public class BatteryDrawable extends Drawable { mColor = color; if (!isWarn()) { - mBoundPaint.setColor(mColor); - mBodyPaint.setColor(mColor); + mPaint.setColor(mColor); invalidateSelf(); } } @@ -107,8 +122,7 @@ public class BatteryDrawable extends Drawable { mWarnColor = color; if (isWarn()) { - mBoundPaint.setColor(mWarnColor); - mBodyPaint.setColor(mWarnColor); + mPaint.setColor(mWarnColor); invalidateSelf(); } } @@ -134,13 +148,10 @@ public class BatteryDrawable extends Drawable { } private void updatePaint(boolean warn) { - if (warn) { - mBoundPaint.setColor(mWarnColor); - mBodyPaint.setColor(mWarnColor); - } else { - mBoundPaint.setColor(mColor); - mBodyPaint.setColor(mColor); - } + if (warn) + mPaint.setColor(mWarnColor); + else + mPaint.setColor(mColor); invalidateSelf(); }