package com.likebamboo.osa.android.ui.view.fa;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
/**
* DrawableAwesome
*
* @see <a herf="https://github.com/bperin/FontAwesomeAndroid">FontAwesomeAndroid</a>
*/
public class DrawableAwesome extends Drawable {
private static final float PADDING_RATIO = 0.88f;
private final Context context;
private final int icon;
private final Paint paint;
private final int width;
private final int height;
private final float size;
private final int color;
private final boolean antiAliased;
private final boolean fakeBold;
private final float shadowRadius;
private final float shadowDx;
private final float shadowDy;
private final int shadowColor;
public DrawableAwesome(int icon, int sizeDpi, int color,
boolean antiAliased, boolean fakeBold, float shadowRadius,
float shadowDx, float shadowDy, int shadowColor, Context context) {
super();
this.context = context;
this.icon = icon;
this.size = dpToPx(sizeDpi) * PADDING_RATIO;
this.height = dpToPx(sizeDpi);
this.width = dpToPx(sizeDpi);
this.color = color;
this.antiAliased = antiAliased;
this.fakeBold = fakeBold;
this.shadowRadius = shadowRadius;
this.shadowDx = shadowDx;
this.shadowDy = shadowDy;
this.shadowColor = shadowColor;
this.paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setTextAlign(Paint.Align.CENTER);
this.paint.setColor(this.color);
this.paint.setTextSize(this.size);
Typeface font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
this.paint.setTypeface(font);
this.paint.setAntiAlias(this.antiAliased);
this.paint.setFakeBoldText(this.fakeBold);
this.paint.setShadowLayer(this.shadowRadius, this.shadowDx, this.shadowDy, this.shadowColor);
}
@Override
public int getIntrinsicHeight() {
return height;
}
@Override
public int getIntrinsicWidth() {
return width;
}
@Override
public void draw(Canvas canvas) {
float xDiff = (width / 2.0f);
String stringIcon = this.context.getResources().getString(icon);
canvas.drawText(stringIcon, xDiff, size, paint);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter cf) {
paint.setColorFilter(cf);
}
private int dpToPx(int dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
public static class DrawableAwesomeBuilder {
private Context context;
private int icon;
private int sizeDpi = 32;
private int color = Color.GRAY;
private boolean antiAliased = true;
private boolean fakeBold = true;
private float shadowRadius = 0;
private float shadowDx = 0;
private float shadowDy = 0;
private int shadowColor = Color.WHITE;
public DrawableAwesomeBuilder(Context context, int icon) {
this.context = context;
this.icon = icon;
}
public void setSize(int size) {
this.sizeDpi = size;
}
public void setColor(int color) {
this.color = color;
}
public void setAntiAliased(boolean antiAliased) {
this.antiAliased = antiAliased;
}
public void setFakeBold(boolean fakeBold) {
this.fakeBold = fakeBold;
}
public void setShadow(float radius, float dx, float dy, int color) {
this.shadowRadius = radius;
this.shadowDx = dx;
this.shadowDy = dy;
this.shadowColor = color;
}
public DrawableAwesome build() {
return new DrawableAwesome(icon, sizeDpi, color, antiAliased, fakeBold,
shadowRadius, shadowDx, shadowDy, shadowColor, context);
}
}
}