Android实现高斯模糊背景对话框,Android进行高斯模糊的简单实现

因为项目上有需求,将客人态的背景设置成用户头像的毛玻璃的效果(这句话怎么这么绕口,还是直接看图片吧)背景就是用户的头像

page_jiaochengQQ%E5%9C%96%E7%89%8720160226233600.jpg

以前没做过这种功能,所以上网查了一下,大牛们调研了很多种实现方法,因为需求比较简单,对性能的要求没有那么苛刻,所以下面我将用最简单的发来实现。思路是利用现有 Android 提供的方法,通过 RenderScript 调用底层接口实现高斯模糊计算.这种方法直接利用 Android 系统提供的机制,从代码实现上是最简单也相对高效的。

第一步

在项目的 build.gradle 下引入 RenderScript 如下

defaultConfig {

applicationId "com.xxxx.xxxx"

minSdkVersion 17

targetSdkVersion 22

// 以下是高斯模糊相关的API

renderscriptTargetApi 22

renderscriptSupportModeEnabled true

}

经测试如果想以这种方式实现高斯模糊的效果,那么 minSdkVersion 最低为 17 ,不然运行的时候会报错。

第二步

给需要进行高斯模糊的背景Imageview设置图片资源,不明白?其实模糊的那一坨东西就是个Imageview,从接口拉取到的用户的头像,再将头像设置给Imageview 设置好之后就可以用下面的方法添加模糊效果了。

/**

* 添加模糊效果

*/

private void applyBlur() {

imgBackgroung.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

@Override

public boolean onPreDraw() {

imgBackgroung.getViewTreeObserver().removeOnPreDrawListener(this);

imgBackgroung.buildDrawingCache();

Bitmap bmp = imgBackgroung.getDrawingCache();

blur(bmp, textBlur);

return true;

}

});

}

imgBackgroung 是 布局的背景Imageview 可以在进入 Activity 的时候拉去用户头像,然后将背景的Imageview设置成用户的头像,之后执行 applyBlur() 方法进行高斯模糊的计算,怎么样是不是很简单。

下面是核心的模糊算法

/**

* 一个高斯模糊的算法

*

* @param bkg

* @param view

*/

private void blur(Bitmap bkg, View view) {

float radius = 20;

Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasuredWidth()),

(int) (view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(overlay);

canvas.translate(-view.getLeft(), -view.getTop());

canvas.drawBitmap(bkg, 0, 0, null);

RenderScript rs = RenderScript.create(UserInfoActivity.this);

Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);

ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());

blur.setInput(overlayAlloc);

blur.setRadius(radius);

blur.forEach(overlayAlloc);

overlayAlloc.copyTo(overlay);

view.setBackground(new BitmapDrawable(getResources(), overlay));

rs.destroy();

}

模糊的程度可以通过改变 radius 的大小来进行设置。

好了到这里,一个高斯模糊的背景就诞生了,demo我就不贴了,因为这个还是比较简单的,有什么问题,可以联系我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值