【问题标题】:How to replicate iOS 7 Blur View in Android如何在 Android 中复制 iOS 7 模糊视图
【发布时间】:2014-02-09 08:27:25
【问题描述】:

我喜欢 iOS 7 为他们的 NotificationMusic 弹出窗口使用的样式,如下所示。

所以,我尝试在 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 宽度和高度的下采样图像。

标签: android ios


【解决方案1】:

http://nicolaspomepuy.fr/blur-effect-for-android-design/

我不知道您是否看过此链接,但请检查一下。它讨论了如何在大约 200 毫秒内实现模糊效果。

PS:请查看 cmets !

【讨论】:

    【解决方案2】:

    好的,如果我正确理解您的问题,您是否有一个抽屉机制,您需要更新抽屉移动的每个像素的模糊图像?

    那么解决您的问题的方法是模糊屏幕一次,并使用该图像和一些奇特的算法来显示/隐藏和定位该图像,以便抽屉看起来会立即模糊,但实际上发生的是图像已经生成。 您只需显示更多或更少的图像来创建效果。

    不知道我是否有道理,或者我是否理解你的问题。

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2015-05-24
      • 2013-09-17
      • 2021-05-23
      • 2023-03-29
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多