如何在Android中复制iOS 7的模糊视图效果

13

我喜欢iOS 7用于其通知音乐弹出的样式,如下所示。

图片描述

因此,我尝试在Android中实现这个东西。经过一些搜索,我找到了如何做到这一点。我尝试的方法如下。

1) 首先,我获取视图的根引用,并使用View的getDrawingCache()函数对其进行截屏。

linearLayout.buildDrawingCache();
SoftReference<Bitmap> bitmap = new SoftReference<Bitmap>(
            Bitmap.createBitmap(linearLayout.getDrawingCache()));
linearLayout.destroyDrawingCache();

2) 我相对于父元素取定位,并根据需要裁剪图像。

SoftReference<Bitmap> temp = new SoftReference<Bitmap>(
            Bitmap.createBitmap(bitmap.get(), 0,
                    (parentHeight - childHeight), childWidth, childHeight));

3) 我使用一些算法使这个位图图片模糊化。(我使用了Android SDK的快速位图模糊 fastBlur效果)

4) 在叠加视图中设置它。

imageView1.setImageBitmap(Utils.fastblur(temp.get(), 8));

但是我的问题是,拍照需要时间才能产生模糊效果并裁剪图像,最后才能得到最终结果。而 iOS 的模糊处理非常快,就像抽屉从底部滑出时,它立即模糊了在其后面的屏幕。

有没有其他方法可以实现这个效果?因为使用我的方案,我不能每秒都拍摄屏幕并在抽屉每次移动时每秒进行1到4的所有处理。


你能否只是用颜色效果将视图的背景半透明化?你所做的很令人印象深刻,但似乎有点不正规,我想知道你的模糊算法是否可以用视图的某种透明度来替代? - Max Ch
你有一个有趣的问题...让我们试着解决它。假设你要覆盖的视图是你的应用程序的一部分,你能否将该视图(最顶层的视图)转换为位图,并在此位图上应用模糊效果?https://dev59.com/EHE85IYBdhLWcg3wYigB 可以给你一些线索。 - Max Ch
谢谢您的关注。亲爱的朋友,我已经完成了。在第1步中,我正在对包含“覆盖视图”的父视图进行屏幕截图。然后我对其应用了快速模糊效果。但是如果我想在抽屉上应用此效果,这将需要太多时间。:( - Chintan Rathod
@Tiago 没有,但这是个好主意.. :) 我会试一试.. :) - Chintan Rathod
@ChintanRathod 好的,请告诉我它是否有效 :) 另外,图像在您的情况下需要多长时间才能模糊?您使用的平均图像有多大,选择的半径值是多少? - Bitcoin Cash - ADA enthusiast
显示剩余3条评论
2个回答

2

1
好的,如果我正确理解你的问题,那么你有一个抽屉机制,需要在每个像素移动时更新模糊图像?
那么解决方法就是对屏幕进行一次模糊处理,并使用某些高级算法来显示/隐藏和定位该图像,以便看起来抽屉会立即模糊,但实际上图像已经生成。你只需显示更多或更少的图像即可创建效果。
不知道我是否讲清楚了,或者我是否理解了你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接