package com.marshalchen.common.uimodule.shapeimageview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import com.marshalchen.common.uimodule.shapeimageview.shader.ShaderHelper; @SuppressWarnings("WeakerAccess") public abstract class ShaderImageView extends ImageView { private final static boolean DEBUG = false; private ShaderHelper pathHelper; public ShaderImageView(Context context) { super(context); setup(context, null, 0); } public ShaderImageView(Context context, AttributeSet attrs) { super(context, attrs); setup(context, attrs, 0); } public ShaderImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setup(context, attrs, defStyle); } private void setup(Context context, AttributeSet attrs, int defStyle) { getPathHelper().init(context, attrs, defStyle); } protected ShaderHelper getPathHelper() { if(pathHelper == null) { pathHelper = createImageViewHelper(); } return pathHelper; } protected abstract ShaderHelper createImageViewHelper(); @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if(getPathHelper().isSquare()) { int width = getMeasuredWidth(); int height = getMeasuredHeight(); int dimen = Math.min(width, height); setMeasuredDimension(dimen, dimen); } } //Required by path helper @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); getPathHelper().onImageDrawableReset(getDrawable()); } @Override public void setImageDrawable(Drawable drawable) { super.setImageDrawable(drawable); getPathHelper().onImageDrawableReset(getDrawable()); } @Override public void setImageResource(int resId) { super.setImageResource(resId); getPathHelper().onImageDrawableReset(getDrawable()); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); getPathHelper().onSizeChanged(w, h); } @Override public void onDraw(Canvas canvas) { if(DEBUG) { canvas.drawRGB(10, 200, 200); } if(!getPathHelper().onDraw(canvas)) { super.onDraw(canvas); } } }