Android ImageView中的透明GIF

Mik*_*ike 13 android gif transparent imageview android-4.4-kitkat

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

我已经尝试过这些没有成功的解决方案: 以编程方式将GIF转换为PNG

有没有人想出如何透明地显示GIF图像?我使用的是Android 18 SDK.

pau*_*aul 19

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

在我的测试中,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
Run Code Online (Sandbox Code Playgroud)


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;
}
Run Code Online (Sandbox Code Playgroud)

注意:我必须将位图复制到新的ARGB_8888图像才能使用.即使将位图加载为可变,我仍然无法修改像素.这就是为什么会有这么多开销的部分原因.