Android中实现布局背景模糊化处理的方法
在模仿IOS密码输入页面的时候发现其背景有模糊处理,于是了解了一下并记录下来,以便使用.在Android中具体实现方法如下
查考https://www.nhooo.com/article/64781.htm
privatevoidapplyBlur(){
//获取壁纸管理器
WallpaperManagerwallpaperManager=WallpaperManager.getInstance(this.getContext());
//获取当前壁纸
DrawablewallpaperDrawable=wallpaperManager.getDrawable();
//将Drawable,转成Bitmap
Bitmapbmp=((BitmapDrawable)wallpaperDrawable).getBitmap();
blur(bmp);
}
下面之所以要进行small和big的处理,是因为仅仅靠ScriptIntrinsicBlur 来处理模式,不能到达更模式的效果,如果需要加深模式效果就需要先把背景图片缩小,在处理完之后再放大.这个可以使用Matrix来实现,而且这样可以缩短模糊化得时间
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
privatevoidblur(Bitmapbkg){
longstartMs=System.currentTimeMillis();
floatradius=20;
bkg=small(bkg);
Bitmapbitmap=bkg.copy(bkg.getConfig(),true);
finalRenderScriptrs=RenderScript.create(this.getContext());
finalAllocationinput=Allocation.createFromBitmap(rs,bkg,Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
finalAllocationoutput=Allocation.createTyped(rs,input.getType());
finalScriptIntrinsicBlurscript=ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));
script.setRadius(radius);
script.setInput(input);
script.forEach(output);
output.copyTo(bitmap);
bitmap=big(bitmap);
setBackground(newBitmapDrawable(getResources(),bitmap));
rs.destroy();
Log.d("zhangle","blurtakeaway:"+(System.currentTimeMillis()-startMs)+"ms");
}
privatestaticBitmapbig(Bitmapbitmap){
Matrixmatrix=newMatrix();
matrix.postScale(4f,4f);//长和宽放大缩小的比例
BitmapresizeBmp=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
returnresizeBmp;
}
privatestaticBitmapsmall(Bitmapbitmap){
Matrixmatrix=newMatrix();
matrix.postScale(0.25f,0.25f);//长和宽放大缩小的比例
BitmapresizeBmp=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
returnresizeBmp;
}