服务器之家

服务器之家 > 正文

Android中实现布局背景模糊化处理的方法

时间:2021-03-18 15:06     来源/作者:Android开发网

在模仿 IOS 密码输入页面的时候发现其背景有模糊处理,于是了解了一下并记录下来,以便使用.在Android 中具体实现方法如下
查考 http://www.zzvips.com/article/148627.html

?
1
2
3
4
5
6
7
8
9
10
11
private void applyBlur() { 
    
  // 获取壁纸管理器 
  WallpaperManager wallpaperManager = WallpaperManager.getInstance(this.getContext()); 
  // 获取当前壁纸 
  Drawable wallpaperDrawable = wallpaperManager.getDrawable(); 
  // 将Drawable,转成Bitmap 
  Bitmap bmp = ((BitmapDrawable) wallpaperDrawable).getBitmap(); 
   
  blur(bmp); 
}

下面之所以要进行small 和big的处理,是因为仅仅靠ScriptIntrinsicBlur  来处理模式,不能到达更模式的效果,如果需要加深模式效果就需要先把背景图片缩小,在处理完之后再放大.这个可以使用Matrix 来实现,而且这样可以缩短模糊化得时间

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
private void blur(Bitmap bkg) { 
  long startMs = System.currentTimeMillis(); 
  float radius = 20
 
  bkg = small(bkg);
  Bitmap bitmap = bkg.copy(bkg.getConfig(), true);
 
  final RenderScript rs = RenderScript.create(this.getContext());
  final Allocation input = Allocation.createFromBitmap(rs, bkg, Allocation.MipmapControl.MIPMAP_NONE,
      Allocation.USAGE_SCRIPT);
  final Allocation output = Allocation.createTyped(rs, input.getType());
  final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
  script.setRadius(radius);
  script.setInput(input);
  script.forEach(output);
  output.copyTo(bitmap);
 
  bitmap = big(bitmap);
  setBackground(new BitmapDrawable(getResources(), bitmap)); 
  rs.destroy(); 
  Log.d("zhangle","blur take away:" + (System.currentTimeMillis() - startMs )+ "ms"); 
 
private static Bitmap big(Bitmap bitmap) {
   Matrix matrix = new Matrix(); 
   matrix.postScale(4f,4f); //长和宽放大缩小的比例
   Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
   return resizeBmp;
 }
 
 private static Bitmap small(Bitmap bitmap) {
   Matrix matrix = new Matrix(); 
   matrix.postScale(0.25f,0.25f); //长和宽放大缩小的比例
   Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
   return resizeBmp;
}

 

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部