kotlin高斯模糊工具类:
使用方法:
BlurHelper().setContainerView(ll_root)
.setImageResourse(R.mipmap.login_bg)
.setContext(this.applicationContext)
.build()
工具类:
class BlurHelper(){
private var mImageId:Int? = null//背景图
private var mContainer:View? = null//容器
private var mContext: Context? = null//上下文
private var mRadius: Float = 10f//模糊程度
fun setImageResourse(id:Int): BlurHelper {
mImageId = id
return this
}
fun setContainerView(view:View): BlurHelper {
mContainer = view
return this
}
fun setRadius(radius:Float): BlurHelper {
mRadius = radius
return this
}
fun setContext(context: Context): BlurHelper {
mContext = context
return this
}
private fun applyBlur() {
//默认状态下是以桌面壁纸为背景
var bmp:Bitmap = if(mImageId==null&& mImageId !is Int){
Log.i("GasBlurHelperConfig","mImageId is noconfig,use the wallpaper!")
val wallpaperManager = WallpaperManager.getInstance(mContext)
val wallpaperDrawable = wallpaperManager.drawable
(wallpaperDrawable as BitmapDrawable).bitmap
}else{
BitmapFactory.decodeResource(mContext!!.resources,mImageId!!)
}
blur(bmp)
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private fun blur(bkg: Bitmap) {
var bkg = bkg
val startMs = System.currentTimeMillis()
var radius:Float = if(mRadius<25f&&mRadius>0f){
mRadius
}else{
10f
}
bkg = small(bkg)
var bitmap = bkg.copy(bkg.config, true)
val rs = RenderScript.create(mContext)
val input = Allocation.createFromBitmap(rs, bkg, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT)
val output = Allocation.createTyped(rs, input.type)
val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs))
script.setRadius(radius)
script.setInput(input)
script.forEach(output)
output.copyTo(bitmap)
bitmap = big(bitmap)
setBackground(mContainer!!,BitmapDrawable(mContext!!.resources, bitmap))
rs.destroy()
Log.d("BlurHelper", "blur take away:" + (System.currentTimeMillis() - startMs) + "ms")
}
private fun big(bitmap: Bitmap): Bitmap {
val matrix = Matrix()
matrix.postScale(2f, 2f) //长和宽放大缩小的比例
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}
private fun small(bitmap: Bitmap): Bitmap {
val matrix = Matrix()
matrix.postScale(0.25f, 0.25f) //长和宽放大缩小的比例
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}
fun build() {
if (mContext == null) {
Log.e("GasBlurHelperConfig", "contextConfig is null!")
return
}
if (mContainer == null && mContainer !is View) {
Log.e("GasBlurHelperConfig", "mContainerId is null!")
return
}
applyBlur()
}
}
网友评论