From 4e32a34ed47c9f0401086b355f77694505ada01b Mon Sep 17 00:00:00 2001 From: wx Date: Thu, 30 Jul 2015 11:39:58 +0800 Subject: [PATCH] =?UTF-8?q?add=20bgColor=20property=20to=20set=20border=20?= =?UTF-8?q?color=20and=20background=20color=20seperately.=20also=20make=20?= =?UTF-8?q?inset=20more=20accurately=20when=20border=20thickness=20is=20od?= =?UTF-8?q?d=20number=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../textdrawable/TextDrawable.java | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/library/src/main/java/com/amulyakhare/textdrawable/TextDrawable.java b/library/src/main/java/com/amulyakhare/textdrawable/TextDrawable.java index db42f8b..22f948f 100644 --- a/library/src/main/java/com/amulyakhare/textdrawable/TextDrawable.java +++ b/library/src/main/java/com/amulyakhare/textdrawable/TextDrawable.java @@ -1,6 +1,6 @@ package com.amulyakhare.textdrawable; -import android.graphics.*; +import android.graphics.Color; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.graphics.drawable.shapes.RectShape; @@ -15,14 +15,15 @@ public class TextDrawable extends ShapeDrawable { private final Paint textPaint; private final Paint borderPaint; private static final float SHADE_FACTOR = 0.9f; - private final String text; - private final int color; + private final String text; + private final int color; private final RectShape shape; - private final int height; - private final int width; - private final int fontSize; - private final float radius; - private final int borderThickness; + private final int height; + private final int width; + private final int fontSize; + private final float radius; + private final int borderThickness; + private final int bgColor; private TextDrawable(Builder builder) { super(builder.shape); @@ -36,10 +37,11 @@ private TextDrawable(Builder builder) { // text and color text = builder.toUpperCase ? builder.text.toUpperCase() : builder.text; color = builder.color; + bgColor = builder.backgroundColor; // text paint settings fontSize = builder.fontSize; - textPaint = new Paint(); + textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); textPaint.setColor(builder.textColor); textPaint.setAntiAlias(true); textPaint.setFakeBoldText(builder.isBold); @@ -50,21 +52,21 @@ private TextDrawable(Builder builder) { // border paint settings borderThickness = builder.borderThickness; - borderPaint = new Paint(); - borderPaint.setColor(getDarkerShade(color)); + borderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + borderPaint.setColor(color); borderPaint.setStyle(Paint.Style.STROKE); borderPaint.setStrokeWidth(borderThickness); // drawable paint color Paint paint = getPaint(); - paint.setColor(color); + paint.setColor(builder.backgroundColor); } private int getDarkerShade(int color) { - return Color.rgb((int)(SHADE_FACTOR * Color.red(color)), - (int)(SHADE_FACTOR * Color.green(color)), - (int)(SHADE_FACTOR * Color.blue(color))); + return Color.rgb((int) (SHADE_FACTOR * Color.red(color)), + (int) (SHADE_FACTOR * Color.green(color)), + (int) (SHADE_FACTOR * Color.blue(color))); } @Override @@ -93,16 +95,17 @@ public void draw(Canvas canvas) { } private void drawBorder(Canvas canvas) { + //for new device density 1dp=3px,so half of 1dp will get 1px, + //this will get 2px inset RectF rect = new RectF(getBounds()); - rect.inset(borderThickness/2, borderThickness/2); + double inset = Math.ceil(borderThickness / 2); + rect.inset((int) inset, (int) inset); if (shape instanceof OvalShape) { canvas.drawOval(rect, borderPaint); - } - else if (shape instanceof RoundRectShape) { + } else if (shape instanceof RoundRectShape) { canvas.drawRoundRect(rect, radius, radius, borderPaint); - } - else { + } else { canvas.drawRect(rect, borderPaint); } } @@ -142,6 +145,8 @@ public static class Builder implements IConfigBuilder, IShapeBuilder, IBuilder { private int color; + private int backgroundColor; + private int borderThickness; private int width; @@ -163,6 +168,7 @@ public static class Builder implements IConfigBuilder, IShapeBuilder, IBuilder { public float radius; private Builder() { + backgroundColor= Color.TRANSPARENT; text = ""; color = Color.GRAY; textColor = Color.WHITE; @@ -176,6 +182,11 @@ private Builder() { toUpperCase = false; } + public IConfigBuilder bgColor(int color) { + this.backgroundColor = color; + return this; + } + public IConfigBuilder width(int width) { this.width = width; return this;