package com.marshalchen.common.uimodule.shapeimageview.shader; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; public class CircleShader extends ShaderHelper { private float center; private float bitmapCenterX; private float bitmapCenterY; private float borderRadius; private int bitmapRadius; public CircleShader() { } @Override public void init(Context context, AttributeSet attrs, int defStyle) { super.init(context, attrs, defStyle); square = true; } @Override public void draw(Canvas canvas, Paint imagePaint, Paint borderPaint) { canvas.drawCircle(center, center, borderRadius, borderPaint); canvas.save(); canvas.concat(matrix); canvas.drawCircle(bitmapCenterX, bitmapCenterY, bitmapRadius, imagePaint); canvas.restore(); } @Override public void onSizeChanged(int width, int height) { super.onSizeChanged(width, height); center = Math.round(viewWidth / 2f); borderRadius = Math.round((viewWidth - borderWidth) / 2f); } @Override public void calculate(int bitmapWidth, int bitmapHeight, float width, float height, float scale, float translateX, float translateY) { bitmapCenterX = Math.round(bitmapWidth / 2f); bitmapCenterY = Math.round(bitmapHeight / 2f); bitmapRadius = Math.round(width / scale / 2f + 0.5f); } @Override public void reset() { bitmapRadius = 0; bitmapCenterX = 0; bitmapCenterY = 0; } }