安卓模糊动态/滚动内容

4
我需要帮助实现模糊解决方案,以达到以下目的:
  1. 我有一个匹配整个活动的ScrollView,其中包含动态内容:可以添加、动画化、删除等;
  2. 我有一个标题,当它被屏幕顶部滚动时,会隐藏内容。
那个标题实际上是应该模糊通过并随后消失在屏幕下方的内容。
我尝试使用许多库,例如Stackblurpaveldudka's blurring和最后500px自己的库
其中一些失败了(要么没有模糊,要么不是预期的结果),我仍在努力找出原因......所有这些库都使用相同的技术Android RenderScript Library
主要问题在于这些库提供一次性渲染。也就是说,他们只能进行一次模糊处理,这对于固定背景/内容非常完美。

500px库是我正在寻找的最接近的东西:

  1. 他们的演示呈现了一个带有动画图像和中间模糊正方形的屏幕;
  2. 如果所述图像经过所述模糊正方形,则它们会被动态地模糊。

查看代码,模糊效果是在动画监听器的更新方法中重新渲染的。这非常昂贵,我想知道是否这是正确的方法。


在动画(如滚动)期间动态模糊UI的效率可能没有足够高的方法。当我说“高效”时,我指的是性能方面。无论如何,请尝试使用此库:https://github.com/wasabeef/Blurry - gilgil28
谢谢,但似乎这个库是一个易于使用的模糊图像解决方案。再次强调,适用于固定内容。无法在ScrollView中使用。正如你所说,我相信没有办法实现我正在寻找的功能。我需要从一个大小为标题的矩形中绘制bitmapdrawable,捕获标题下面的内容,将其模糊并设置为标题背景。而在我的情况下,每次用户滚动时都需要这样做... - Mackovich
另一个选项是模仿模糊图像的感觉,使用半透明层。如果您要模糊的视图在颜色方面非常相似,您可以生成一个模糊图像,并使用该图像的半透明层。 - gilgil28
@gilgil28 我同意你的看法。我也在考虑同样的事情。使用渐变颜色的透明背景会很好,但问题是滚动内容可能会非常多样化,因此呈现效果可能不太令人满意。但这仍然是一个可行的选择。感谢你的建议 :) 不过非常奇怪的是,在iOS上做到这一点非常容易 :/ - Mackovich
也许值得检查一下在iOS中是如何实现的。 这一定是某种解决方法,可能比我建议的更复杂。 - gilgil28
1个回答

0

如果您还没有找到任何足够的解决方案,我会告诉您如何模糊整个屏幕,这应该是使用RS完成此操作的最快最有效的方法:

private static final float BITMAP_SCALE = 0.05f;
private static final float BLUR_RADIUS = 8.0f;

    private Bitmap blurImage (Bitmap input) {
        if (input == null){
            return null;
        }

        int width = Math.round(input.getWidth() * BITMAP_SCALE);
        int height = Math.round(input.getHeight() * BITMAP_SCALE);

        Bitmap inputBitmap = Bitmap.createScaledBitmap(input, width, height, false);
        Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

        ScriptIntrinsicBlur theIntrinsic = null;

        theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
        theIntrinsic.setRadius(BLUR_RADIUS);
        theIntrinsic.setInput(tmpIn);
        theIntrinsic.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);

        return outputBitmap;
    }

非常感谢您的出色建议,但不幸的是我已经在多个场合尝试过非常相似的技术。您的解决方案是模糊任何内容的正确方法,但不适用于我正在尝试的即时处理。无论如何,还是非常感谢您! - Mackovich

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