package com.abewy.android.apps.klyph.drawable; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; public class ProfileIcon extends Drawable { private final float mCornerRadius = 100.0f; private final RectF mRect = new RectF(); private final Bitmap mBitmap; private final Paint mPaint; private final int mSide; private final int mColor; private float mScale; public ProfileIcon(Bitmap bitmap, int color) { mBitmap = bitmap; mColor = color; mPaint = new Paint(); mPaint.setAntiAlias(true); mSide = (int) Math.min(mBitmap.getWidth(), mBitmap.getHeight()); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); mScale = (float) bounds.width() / mSide; mRect.set(0, 0, bounds.width(), bounds.height()); } @Override public void draw(Canvas canvas) { Matrix matrix = new Matrix(); matrix.setScale(mScale, mScale); int x = (int) (mBitmap.getWidth() - mSide) / 2; int y = (int) (mBitmap.getHeight() - mSide) / 2; Bitmap b = Bitmap.createBitmap(mBitmap, x, y, mSide, mSide, matrix, true); BitmapShader bitmapShader = new BitmapShader(b, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(bitmapShader); Paint bPaint = new Paint(); bPaint.setAntiAlias(true); bPaint.setColor(mColor); canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, bPaint); RectF r = new RectF(); r.set(2, 2, mRect.right - 2, mRect.bottom - 2); canvas.drawRoundRect(r, mCornerRadius, mCornerRadius, mPaint); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { mPaint.setColorFilter(cf); } }