您的位置:首页 > 其它

Andorid 实现 Launcher桌面快速模糊 13毫秒左右

2016-01-07 14:39 190 查看
桌面的模糊,比较蛋疼。效率一直是一个问题,因为桌面要合成壁纸+桌面+模糊。

我的做法如下:

1、拿到桌面的View,通过View获取到图片Bitmap(这个是整个桌面当前可见的缓存图片,并且对图片进行按比例缩放,降低图片的质量)

2、拿到当前壁纸图片(需要对壁纸进行当前屏幕裁剪,因为壁纸是滚动的,还有适当进行图片压缩)

3、将拿到的桌面Bimap 和壁纸Bitmap 2张图进行合成一张,最后,将这张图进行高斯模糊。

代码如下:

Bitmap mBlurBitmap=null;

Canvas mCanvas=null;
Paint drawPaint=null;

float scaleFactor = 12;
int radius = 5;
public boolean blurLayout(){
long startTime = System.nanoTime();  //开始时间
if(mBlurBitmap==null) {
if(getWidth()<=0||getHeight()<=0){
return false;
}
mBlurBitmap = Bitmap.createBitmap((int)(getMeasuredWidth()/scaleFactor), (int)(getMeasuredHeight()/scaleFactor), Bitmap.Config.ARGB_4444);
}

mBlurBitmap.eraseColor(Color.TRANSPARENT);

if(mCanvas==null){
mCanvas=new Canvas(mBlurBitmap);
}

if(drawPaint==null){
drawPaint=new Paint();
//			drawPaint.setStyle(Paint.Style.FILL);
drawPaint.setFlags(Paint.FILTER_BITMAP_FLAG);
}

Bitmap mWallpaperBitmap=getWallpaper();
if(mWallpaperBitmap==null){
return false;
}

mCanvas.save();
mCanvas.clipRect(new Rect(0, 0, getWidth(), getHeight()));

//将图片缩小到原来的1/12
mCanvas.translate(-getLeft() / scaleFactor, -getTop() / scaleFactor);
mCanvas.scale(1 / scaleFactor, 1 / scaleFactor);

//画壁纸
mCanvas.drawBitmap(mWallpaperBitmap,0,0,drawPaint);
//画屏幕
View mView=Launcher.getLauncher().getBlurView();
mView.draw(mCanvas);

mCanvas.restore();
long consumingTime = System.nanoTime() -startTime; //消耗时间
Bitmap lastBitmap=NativeStackBlur.process(mBlurBitmap, radius);
Log.d("blurLayout", "blur_bg:" + consumingTime/1000000);
setImageBitmap(lastBitmap);

return false;
}


//获取壁纸我就不说了,根据壁纸类,拿壁纸的偏移量*WorkSpace的宽度,就可以裁剪出,当前屏幕的Bitmap。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: