package com.mozu.mozuandroidinstoreassistant.app.views; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.Drawable; public class PathDrawable extends Drawable { private final Bitmap mBitmap; private Bitmap mTransformedBitmap; private Path mPath; private Paint mPaint; public PathDrawable(Bitmap bitmap) { mBitmap = bitmap; mPaint = new Paint(); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.BLACK); } @Override protected void onBoundsChange(Rect bounds) { super.onBoundsChange(bounds); if(mTransformedBitmap != null) mTransformedBitmap.recycle(); mTransformedBitmap = Bitmap.createScaledBitmap(mBitmap, bounds.width(), bounds.height(), false); BitmapShader shader = new BitmapShader(mTransformedBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(shader); mPaint.setAntiAlias(true); } @Override public void draw(Canvas canvas) { Rect bounds = getBounds(); //get bounds of path to scale to bounds of view if different RectF pathBounds = new RectF(); mPath.computeBounds(pathBounds, true); //scale path to view Matrix pathToBoundsMatrix = new Matrix(); pathToBoundsMatrix.postScale((float)bounds.width()/pathBounds.width(), (float)bounds.height()/pathBounds.height()); pathToBoundsMatrix.postTranslate(bounds.left, bounds.top); canvas.concat(pathToBoundsMatrix); canvas.drawPath(mPath, mPaint); } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return 0; } protected void setPath(Path path) { mPath = path; } }