【发布时间】:2014-02-09 08:27:25
【问题描述】:
我喜欢 iOS 7 为他们的 Notification 和 Music 弹出窗口使用的样式,如下所示。
所以,我尝试在 Android 中实现这个东西。在做了一些搜索之后,我实现了如何做到这一点。我已经尝试过。
1) 首先,我获取 View 的根引用并使用 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) 我用某种算法使位图图像模糊。 (我用Fast Bitmap Blur For Android SDKfastBlur效果)
4) 将其设置在叠加视图中。
imageView1.setImageBitmap(Utils.fastblur(temp.get(), 8));
但我的问题是拍一张照片需要时间,然后给出模糊效果和切割图像,然后我得到了最终结果。虽然 iOS 有非常快的模糊过程,比如当抽屉从底部出来时,它会立即模糊它后面的屏幕。
还有其他方法可以实现吗?因为使用我的场景,我不能在每次移动抽屉时每秒都拍摄屏幕并每秒执行所有过程 1 到 4。
【问题讨论】:
-
你能把视图的背景设置成半透明的颜色效果吗?你所做的令人印象深刻,但似乎有点老套,我想知道你的模糊算法是否可以用某种程度的视图透明度代替?
-
嗯..我已经这样做了。半透明不会给我这样的输出,我想要透明+模糊“叠加视图”的当前内容。
-
你有一个有趣的问题......让我们尝试破解它,假设你覆盖的视图是你的应用程序的一部分,你能把那个视图(它的最父视图)转换为位图吗并在此位图上应用您的模糊效果? stackoverflow.com/questions/2801116/… 可能会给你一个线索..
-
感谢您的关注。我亲爱的朋友,我已经这样做了。在步骤 1 中,我正在截取父视图的屏幕截图,其中存在“叠加视图”。然后我对它应用 fastBlur 效果。但是,如果我想在抽屉上申请,这将花费太多时间.. :(
-
使用 GPU 模糊图像会快得多,但我不确定将图像传输到本机内存然后将其拉回的时间是否合理。如果您想减少快速模糊的时间,您可以使用 1/4 宽度和高度的下采样图像。