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

桌面的模糊,比较蛋疼。效率一直是一个问题,因为桌面要合成壁纸+桌面+模糊。

我的做法如下:

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重播

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值