From bd5fbd6a617b8799724dc6e0e210700db3280dba Mon Sep 17 00:00:00 2001 From: center <277986425@qq.com> Date: Thu, 26 May 2022 10:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E5=9C=A8onDraw=E9=87=8C=E9=9D=A2=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/center/blurview/ShapeBlurView.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/blurview/src/main/java/net/center/blurview/ShapeBlurView.java b/blurview/src/main/java/net/center/blurview/ShapeBlurView.java index 731b393..59e8924 100644 --- a/blurview/src/main/java/net/center/blurview/ShapeBlurView.java +++ b/blurview/src/main/java/net/center/blurview/ShapeBlurView.java @@ -97,7 +97,8 @@ public class ShapeBlurView extends View { private final Paint mBorderPaint; private float mBorderWidth = 0; private ColorStateList mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR); - + private Matrix matrix; + private BitmapShader shader; public ShapeBlurView(Context context, AttributeSet attrs) { super(context, attrs); @@ -136,6 +137,7 @@ public ShapeBlurView(Context context, AttributeSet attrs) { a.recycle(); } catch (Exception e) { + e.printStackTrace(); } mBitmapPaint = new Paint(); // mBitmapPaint.setStyle(Paint.Style.FILL); @@ -146,6 +148,8 @@ public ShapeBlurView(Context context, AttributeSet attrs) { mBorderPaint.setAntiAlias(true); mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR)); mBorderPaint.setStrokeWidth(mBorderWidth); + + matrix = new Matrix(); } private void initCornerData(float cornerRadiusOverride) { @@ -401,6 +405,12 @@ private void releaseBitmap() { mBlurredBitmap.recycle(); mBlurredBitmap = null; } + if (matrix != null) { + matrix = null; + } + if (shader != null) { + shader = null; + } } protected void release() { @@ -462,6 +472,7 @@ protected boolean prepare() { } protected void blur(Bitmap bitmapToBlur, Bitmap blurredBitmap) { + shader = new BitmapShader(blurredBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mBlurImpl.blur(bitmapToBlur, blurredBitmap); } @@ -627,8 +638,9 @@ private void drawOvalRectBitmap(Canvas canvas, Bitmap blurBitmap, int overlayCol mRectFDst.bottom = getHeight(); mBitmapPaint.reset(); mBitmapPaint.setAntiAlias(true); - BitmapShader shader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - Matrix matrix = new Matrix(); + if (shader == null) { + shader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + } matrix.postScale(mRectFDst.width() / blurBitmap.getWidth(), mRectFDst.height() / blurBitmap.getHeight()); shader.setLocalMatrix(matrix); mBitmapPaint.setShader(shader); @@ -662,8 +674,9 @@ private void drawCircleRectBitmap(Canvas canvas, Bitmap blurBitmap, int overlayC mRectSrc.bottom = blurBitmap.getHeight(); mBitmapPaint.reset(); mBitmapPaint.setAntiAlias(true); - BitmapShader shader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - Matrix matrix = new Matrix(); + if (shader == null) { + shader = new BitmapShader(blurBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + } matrix.postScale(mRectFDst.width() / mRectSrc.width(), mRectFDst.height() / mRectSrc.height()); shader.setLocalMatrix(matrix); mBitmapPaint.setShader(shader);