单纯使用较为简单,流程:界面切屏-->图片缩放处理-->模糊处理
界面切屏生成Bitmap
bgView = activity.getWindow().getDecorView();
bgView.setDrawingCacheEnabled(true);
bgView.buildDrawingCache(true);
/**
* 获取当前窗口快照,相当于截屏
*/
Bitmap bmp1 = bgView.getDrawingCache();
图片缩放处理
有两种方式,第一种:
Bitmap overlay = Bitmap.createBitmap(
(int) (bgView.getMeasuredWidth() / scaleFactor),
(int) (bgView.getMeasuredHeight() / scaleFactor),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(overlay);
canvas.translate(-bgView.getLeft() / scaleFactor, -bgView.getTop() / scaleFactor);
canvas.scale(1 / scaleFactor, 1 / scaleFactor);
Paint paint = new Paint();
paint.setFlags(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(bkg, 0, 0, paint);
理解起来较为复杂
第二种较为简单:
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bkg,
(int) (bkg.getWidth() / scaleFactor),
(int) (bkg.getHeight() / scaleFactor),
false);
其中scaleFactor就是缩放程度
模糊处理
scaledBitmap = FastBlur.doBlur(scaledBitmap, (int) radius, true);
使用通用的FastBlur方法,最后得到的bitmap设为背景即可,下边是我得到的效果:
经过测试,在整个处理过程中,这个模糊程度主要有两个值控制:缩放程度scaleFactor和模糊处理的参数radius,上图的使用的参数值分别为10、8。