package acr.browser.lightning.utils; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.TypedValue; import android.view.View; public class DrawableUtils { public static Bitmap getRoundedNumberImage(int number, int width, int height, int color, int thickness) { String text; if (number > 99) { text = "\u221E"; } else { text = String.valueOf(number); } Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(image); Paint paint = new Paint(); paint.setColor(color); Typeface boldText = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD); paint.setTypeface(boldText); paint.setTextSize(Utils.dpToPx(14)); paint.setAntiAlias(true); paint.setTextAlign(Paint.Align.CENTER); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); int radius = Utils.dpToPx(2); RectF outer = new RectF(0, 0, canvas.getWidth(), canvas.getHeight()); canvas.drawRoundRect(outer, radius, radius, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); radius--; RectF inner = new RectF(thickness, thickness, canvas.getWidth() - thickness, canvas.getHeight() - thickness); canvas.drawRoundRect(inner, radius, radius, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); int xPos = (canvas.getWidth() / 2); int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2)); canvas.drawText(String.valueOf(text), xPos, yPos, paint); return image; } public static int mixColor(float fraction, int startValue, int endValue) { int startA = (startValue >> 24) & 0xff; int startR = (startValue >> 16) & 0xff; int startG = (startValue >> 8) & 0xff; int startB = startValue & 0xff; int endA = (endValue >> 24) & 0xff; int endR = (endValue >> 16) & 0xff; int endG = (endValue >> 8) & 0xff; int endB = endValue & 0xff; return (startA + (int) (fraction * (endA - startA))) << 24 | (startR + (int) (fraction * (endR - startR))) << 16 | (startG + (int) (fraction * (endG - startG))) << 8 | (startB + (int) (fraction * (endB - startB))); } public static Drawable resolveDrawableAttribute(@NonNull Context context, @AttrRes int res) { int[] attribute = new int[]{res}; int indexOfAttrTextSize = 0; TypedValue typedValue = new TypedValue(); TypedArray a = context.obtainStyledAttributes(typedValue.data, attribute); Drawable drawable = a.getDrawable(indexOfAttrTextSize); a.recycle(); return drawable; } public static void setBackground(@NonNull View view, @Nullable Drawable drawable) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setBackground(drawable); } else { //noinspection deprecation view.setBackgroundDrawable(drawable); } } }