标签:
毛玻璃效果:高斯模糊实现
View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap b1 = view.getDrawingCache();
public void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);View view = getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache(true);blur(bmp1,bgLayout);}
/*** 将一个Activity截图** @param activity* @return*/private Bitmap takeScreenShot(Activity activity) {View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap b1 = view.getDrawingCache();// 获取状态栏高度Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;// 获取屏幕长和高DisplayMetrics dm = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(dm);int width = dm.widthPixels;int height = dm.heightPixels;// 去掉标题栏Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height- statusBarHeight);view.destroyDrawingCache();return b;}
private void blur(Bitmap bkg, ViewGroup view) {long startMs = System.currentTimeMillis();float scaleFactor = 4;// 图片缩放比例;float radius = 20;// 模糊程度int width = (int) view.getMeasuredWidth();int height = (int) view.getMeasuredHeight();Bitmap overlay = Bitmap.createBitmap((int) (width / scaleFactor),(int) (height / scaleFactor), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(overlay);canvas.translate(-view.getLeft() / scaleFactor, -view.getTop()/ scaleFactor);canvas.scale(1 / scaleFactor, 1 / scaleFactor);Paint paint = new Paint();paint.setFlags(Paint.FILTER_BITMAP_FLAG);canvas.drawBitmap(bkg, 0, 0, paint);overlay = FastBlur.doBlur(overlay, (int) radius, true);view.setBackground(new BitmapDrawable(getResources(), overlay));/*** 打印高斯模糊处理时间,如果时间大约16ms,用户就能感到到卡顿,时间越长卡顿越明显,如果对模糊完图片要求不高,* 可是将scaleFactor设置大一些。*/Log.i("jerome", "blur time:" + (System.currentTimeMillis() - startMs));}
标签:
原文地址:http://www.cnblogs.com/fruitbolgs/p/4663683.html