android - Android ImageView 中的透明 GIF

标签 android imageview transparent gif android-4.4-kitkat

我试图在我的应用程序中显示透明 GIF 图像但没有成功。我可以下载并在 ImageView 中显示图标,但背景是白色而不是透明的。

我已经尝试过这些解决方案但没有成功: Convert GIF to PNG programatically

有没有人想出如何显示透明的 GIF 图像?我正在使用 Android 18 SDK。

最佳答案

这是一个对我有用的解决方法。这不是一个好的解决方案。它可能并非在所有情况下都有效,并且图像处理的开销很大。希望其他人会找到更好的解决方案。

在我的测试中,4.4 中的 GIF 图像具有白色 (-1) 或黑色 (-16777216) 的透明度值。加载位图后,您可以将白色/黑色像素转换回透明。当然,这只有在图像的其余部分不使用相同颜色时才有效。如果是这样,那么您还将把原始图像中不透明的部分图像转换为透明。就我而言,这不是问题。

您可以使用以下代码将白色或黑色像素转换为透明。

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
bitmap = eraseBG(bitmap, -1);         // use for white background
bitmap = eraseBG(bitmap, -16777216);  // use for black background


private static Bitmap eraseBG(Bitmap src, int color) {
    int width = src.getWidth();
    int height = src.getHeight();
    Bitmap b = src.copy(Config.ARGB_8888, true);
    b.setHasAlpha(true);

    int[] pixels = new int[width * height];
    src.getPixels(pixels, 0, width, 0, 0, width, height);

    for (int i = 0; i < width * height; i++) {
        if (pixels[i] == color) {
            pixels[i] = 0;
        }
    }

    b.setPixels(pixels, 0, width, 0, 0, width, height);

    return b;
}

注意:我必须将位图复制到一个新的 ARGB_8888 图像才能工作。即使将位图加载为可变位图,我仍然无法修改像素。这就是开销如此之大的部分原因。

关于android - Android ImageView 中的透明 GIF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056050/

相关文章:

android - API 小于 21 的点击波纹效应

android - 在 ImageView 的角上显示文本

java - 当我在较小的设备上运行程序时,如何删除 imageView

android - 透明背景

android - android库项目中的FileProvider权限

android - distanceTo 返回的距离是多少?

java - 如何通过按钮更改后对齐 imageView

Java 小程序 : is there a simple way to draw and erase in a two-layered 2D scene?

c++ - 在 qgraphicsview 中忽略 svg 图像透明部分上的鼠标事件?

android - 如何将现有的仅 header 源文件添加到 android studio?