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);
}
}
}