- 使用方法
关于ImageView蒙版、高斯模糊的实现方法,蒙版实现原理很简单,就是继承自ImageView绘制透明涂层,高斯模糊,可以直接使用Glide中apply() 方法实现!这两个功能我封装到了一起!如下!
package com.chengyinan.tests;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.request.RequestOptions;
import java.security.MessageDigest;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
-
自定义MaskImageView
-
@author ThirdGoddess
-
@email ofmyhub@gmail.com
-
@Github https://github.com/ThirdGoddess
-
@date :2020-05-23 21:54
*/
@SuppressLint(“AppCompatCustomView”)
public class MaskImageView extends ImageView {
private Context context;
//蒙版色值
private int color = Color.parseColor(“#81FFFFFF”);
//是否显示蒙版
private boolean isShowMask = false;
public MaskImageView(Context context) {
super(context);
this.context = context;
}
public MaskImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public MaskImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
}
@SuppressLint(“DrawAllocation”)
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (isShowMask) {
canvas.drawColor(color);
}
}
/**
- 设置蒙版颜色,可以通过类似于(#81FFFFFF)来控制透明度
*/
public MaskImageView setMaskColor(int color) {
this.color = color;
return this;
}
/**
- 显示蒙版
*/
public void showMask() {
isShowMask = true;
invalidate();
}
/**
- 关闭蒙版
*/
public void dismissMask() {
isShowMask = false;
invalidate();
}
/**
-
高斯模糊处理
-
@param radius
-
@return
*/
public Bitmap setGaussblur(int radius, Bitmap source) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
RenderScript renderScript = RenderScript.create(context);
final Allocation input = Allocation.createFromBitmap(renderScript, source);
final Allocation output = Allocation.createTyped(renderScript, input.getType());
ScriptIntrinsicBlur scriptIntrinsicBlur;
scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
scriptIntrinsicBlur.setInput(input);
scriptIntrinsicBlur.setRadius(radius);
scriptIntrinsicBlur.forEach(output);
output.copyTo(source);
renderScript.destroy();
return source;
} else {
return source;
}
}
/**
-
开启高斯模糊
-
@return
*/
public RequestOptions setGaussBlur() {
return RequestOptions.bitmapTransform(new GlideBlurTransformation(context));
}