Android毛玻璃背景效果简单实现代码
思路:
1.使用findViewByid获得需要设置毛玻璃的控件。
2.调用setBlurBackground(Bitmapbmp)方法(下面会给出),参数为Bitmap类型,给控件设置毛玻璃背景!
3.已完成,
方法:
/**
*设置毛玻璃背景
*背景图片Bitmap
*/
privatevoidsetBlurBackground(Bitmapbmp)
{
finalBitmapblurBmp=BlurUtil.fastblur(ParentCircleInfoActivity.this,bmp,10);//0-25,表示模糊值
finalDrawabledrawable=ImageUtil.getDrawable(this,blurBmp);//将bitmap类型图片转为Drawable类型
mRLHead.post(newRunnable()//调用UI线程
{
@Override
publicvoidrun()
{
mRLHead.setBackgroundDrawable(drawable);
}
});
}
bitmap转drawable:
/**
*bitmap->drawable
*@paramcontext
*@parambm
*@return
*/
publicstaticDrawablegetDrawable(Contextcontext,Bitmapbm){
BitmapDrawablebd=newBitmapDrawable(context.getResources(),bm);
returnbd;
}
使用到的工具类:
publicclassBlurUtil
{
@SuppressLint("NewApi")
publicstaticBitmapfastblur(Contextcontext,BitmapsentBitmap,intradius)
{
if(VERSION.SDK_INT>16)
{
Bitmapbitmap=sentBitmap.copy(sentBitmap.getConfig(),true);
finalRenderScriptrs=RenderScript.create(context);
finalAllocationinput=Allocation.createFromBitmap(rs,sentBitmap,Allocation.MipmapControl.MIPMAP_NONE,Allocation.USAGE_SCRIPT);
finalAllocationoutput=Allocation.createTyped(rs,input.getType());
finalScriptIntrinsicBlurscript=ScriptIntrinsicBlur.create(rs,Element.U8_4(rs));
script.setRadius(radius);/*e.g.3.f*/
script.setInput(input);
script.forEach(output);
output.copyTo(bitmap);
returnbitmap;
}
Bitmapbitmap=sentBitmap.copy(sentBitmap.getConfig(),true);
if(radius<1)
{
return(null);
}
intw=bitmap.getWidth();
inth=bitmap.getHeight();
int[]pix=newint[w*h];
Log.e("pix",w+""+h+""+pix.length);
bitmap.getPixels(pix,0,w,0,0,w,h);
intwm=w-1;
inthm=h-1;
intwh=w*h;
intdiv=radius+radius+1;
intr[]=newint[wh];
intg[]=newint[wh];
intb[]=newint[wh];
intrsum,gsum,bsum,x,y,i,p,yp,yi,yw;
intvmin[]=newint[Math.max(w,h)];
intdivsum=(div+1)>>1;
divsum*=divsum;
intdv[]=newint[256*divsum];
for(i=0;i<256*divsum;i++)
{
dv[i]=(i/divsum);
}
yw=yi=0;
int[][]stack=newint[div][3];
intstackpointer;
intstackstart;
int[]sir;
intrbs;
intr1=radius+1;
introutsum,goutsum,boutsum;
intrinsum,ginsum,binsum;
for(y=0;y>16;
sir[1]=(p&0x00ff00)>>8;
sir[2]=(p&0x0000ff);
rbs=r1-Math.abs(i);
rsum+=sir[0]*rbs;
gsum+=sir[1]*rbs;
bsum+=sir[2]*rbs;
if(i>0)
{
rinsum+=sir[0];
ginsum+=sir[1];
binsum+=sir[2];
}
else
{
routsum+=sir[0];
goutsum+=sir[1];
boutsum+=sir[2];
}
}
stackpointer=radius;
for(x=0;x>16;
sir[1]=(p&0x00ff00)>>8;
sir[2]=(p&0x0000ff);
rinsum+=sir[0];
ginsum+=sir[1];
binsum+=sir[2];
rsum+=rinsum;
gsum+=ginsum;
bsum+=binsum;
stackpointer=(stackpointer+1)%div;
sir=stack[(stackpointer)%div];
routsum+=sir[0];
goutsum+=sir[1];
boutsum+=sir[2];
rinsum-=sir[0];
ginsum-=sir[1];
binsum-=sir[2];
yi++;
}
yw+=w;
}
for(x=0;x0)
{
rinsum+=sir[0];
ginsum+=sir[1];
binsum+=sir[2];
}
else
{
routsum+=sir[0];
goutsum+=sir[1];
boutsum+=sir[2];
}
if(i
总结
以上所述是小编给大家介绍的Android毛玻璃背景效果简单实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!