package org.wheelmap.android.utils; import android.databinding.BindingAdapter; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.support.v7.widget.ViewUtils; import android.widget.ImageView; public class TextDrawable extends Drawable { private Paint mPaint; private CharSequence mText; private int mIntrinsicWidth; private int mIntrinsicHeight; public TextDrawable(CharSequence text, int color, int textSize) { mText = text; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(color); mPaint.setTextAlign(Paint.Align.CENTER); mPaint.setTextSize(textSize); mIntrinsicWidth = (int) (mPaint.measureText(mText, 0, mText.length()) + .5); mIntrinsicHeight = mPaint.getFontMetricsInt(null); } @Override public void draw(@NonNull Canvas canvas) { Rect bounds = getBounds(); canvas.drawText(mText, 0, mText.length(), bounds.centerX(), bounds.centerY() + (mIntrinsicHeight / 4), mPaint); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public int getIntrinsicWidth() { return mIntrinsicWidth; } @Override public int getIntrinsicHeight() { return mIntrinsicHeight; } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter filter) { mPaint.setColorFilter(filter); } @BindingAdapter({"app:drawableText", "app:drawableTextColor", "app:drawableTextSize"}) public static void textDrawable(ImageView imageView, String text, int color, int size) { int fontSize = (int) UtilsMisc.dbToPx(imageView.getResources(), size); imageView.setImageDrawable(new TextDrawable(text, color, fontSize)); } }