android dialog背景模糊化效果实现方法背景模糊化效果实现方法
最近做项目有这样的需求: 在activity中启动一个dialog时, 启动的dialog的背景设为启动acitivity的模糊化图片.
实现思路实现思路:
1. 截屏, 获取当前activity的界面
2. 将获取的照片进行模糊化
3. 将模糊化的图片设为dialog的背景
1.截屏截屏, 获取当前获取当前activity的界面的界面
private Bitmap takeScreenShot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
// 获取屏幕长和高
int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
Bitmap bmp = Bitmap.createBitmap(b1, 0, 0, width, height);
view.destroyDrawingCache();
return bmp;
}
这里需要注意: 默认dialog是全屏, activity也是全屏没有状态栏. 如果有状态栏需要获取状态栏大小, 在创建图片的时候减去状态
栏大小.
2.将获取的图片进行模糊化将获取的图片进行模糊化, 这里的模糊算法这里的模糊算法, 是从网上查到是从网上查到, 具体是进行高斯模糊具体是进行高斯模糊. 具体代码在下面的工具类中具体代码在下面的工具类中.
3.设置模糊图片为设置模糊图片为dialog的背景的背景
//blurBackgroundDrawer为模糊后的背景图片
Window window = getWindow();
window.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), blurBackgroundDrawer));
注意: 模糊化图片可能会比较慢, 刚开始测得时候在3 – 4秒之间, 解决办法是将获取到的屏幕进行缩小,然后在进行模糊, 模糊完
后, 再将图片放大.
下面是将背景模糊化效果封装成的工具类代码, 使用方法: 只需要将其考到工程中, 在需要模糊化效果的地方调用:
Bitmap bmp = getBlurBackgroundDrawer(activity); 即可.
public class FastBlurUtility {
/**
* 获得模糊化的背景图片
* @param activity 获取模糊化的背景activity
* @return 模糊化的背景图片
*/
public static Bitmap getBlurBackgroundDrawer(Activity activity) {
Bitmap bmp = takeScreenShot(activity);
return startBlurBackground(bmp);
}
/**
* 截屏
* @param activity 截屏的activity
* @return 截屏图片
*/
private static Bitmap takeScreenShot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
// 获取屏幕长和高
int width = activity.getResources().getDisplayMetrics().widthPixels;
评论0
最新资源