如何将 Android XML Drawable 保存、导出或转换为 PNG 图像文件?

Posted

技术标签:

【中文标题】如何将 Android XML Drawable 保存、导出或转换为 PNG 图像文件?【英文标题】:How to save, export, or convert an Android XML Drawable as a PNG image file? 【发布时间】:2012-01-21 03:24:00 【问题描述】:

我有一个我非常喜欢的渐变,但我使用 XML drawable 创建了它:

<gradient
    android:startColor="#DD181C18"
    android:endColor="#809C7D5A"
    android:angle="90"/>

将其创建为 png 或类似内容的简单方法是什么?

我真正想要的是: 一个工具,可以和使用该工具的说明使用#aarrggbb 格式作为它的输入alpha/颜色(90 度角,通常角度,将是一个加号)。

感谢您的帮助。

编辑:哦!我完全意识到 ImageMagick 应该能够做到这一点。我会尽快发布我的答案代码,除非有人想打败我并获得全部赏金!

【问题讨论】:

以空布局显示并使用 Eclipse 功能的图像快照或在设备上运行并按照相同的过程获取高分辨率图像 除非我遗漏了什么......这也不会保持透明度。 发布代码怎么样? :) @bluszcz 你指的是什么代码? @TryTryAgain 啊,抱歉 - 我没有在页面底部注意到您的回答 :) 【参考方案1】:

最后它是一个使用ImageMagick的单行线!

我不敢相信我以前没想过使用 ImageMagick,Duh!!!

convert -size 480x84 gradient:'rgba(156, 125, 90, 0.52)'-'rgba(24, 28, 24, 0.86)' tmp.png

作为参考,我使用我的 Android XML drawable ##AARRGGBB 值创建了一个 .png 图像文件。 ImageMagick FTW!!!

感谢大家的意见。

【讨论】:

我该怎么做【参考方案2】:

使用像 photoshop 或 paint.Net 这样的程序 - 它们都有渐变工具,应该可以让您以与那里相同的格式设置颜色。

【讨论】:

我只能访问免费和 OSS 和 OS。我还没有找到使用 GIMP 实现此目的的方法。同样,渐变不是问题,而是使用渐变保持透明度是我面临的问题。 Paint.Net 是免费的并保持透明度。【参考方案3】:

试试这个:

try 
    item.setDrawingCacheEnabled(true);
    Bitmap bmp = item.getDrawingCache();
    FileOutputStream out = new FileOutputStream(filename);
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
 catch (Exception e) 
    e.printStackTrace();

这里item 是我要渲染的视图/视图组。

我实际上使用相同的片段(减去文件写入)进行一些屏幕渲染,它似乎保留了透明度。

关于颜色的注意事项:

可以在 android 中使用十六进制值指定颜色。模式ARGB(共32 位)中的每个颜色值都有一个字节(8 位)可用。 A 代表AlphaR 代表RedG 代表GreenB 代表Blue。每个组件的值可以介于 (0, 255) 之间。请注意:

decimal 0   = hex 0x00
decimal 255 = hex 0xFF

因此,如果您想要具有不透明 'Alpha(no transparency) you would use#FFFFFFFF. For Black#FF000000. For Grey#FF808080.80is hex value of decimal 128 and gives you half of full intensity white. so80` 的白色,则为您提供中值灰色。

使用十六进制算术来获取十进制颜色的值。

AFAIK,径向渐变的角度不应该有任何区别。在 GIMP 中尝试所有这些或阅读 GIMP 教程。如果可以的话,最好还是使用 Photoshop(提供 90 天试用版)。

【讨论】:

顺便说一句,你确定 gimp 不能保存具有透明度的渐变吗?快速浏览docs.gimp.org/en/gimp-concepts-gradients.html 表明创建是可能的。保存是自然的结果。 谢谢,我很新鲜,不知道如何处理该代码以从我的 xml 文件创建 .png 文件。 GIMP 绝对可以保存具有透明度的渐变。我只是不知道 DD 和 80 等于梯度 AA (alpha) 的百分比以及如何合并 90 度角。 恐怕这里没有捷径可走。你应该做一些阅读。对于颜色,这里有一个简短而甜蜜的底漆:w3schools.com/html/html_colors.asp 添加了一些关于颜色的信息,看看是否有帮助。 谢谢@ManishGupta 我正在寻找一个不会以编程方式实现它的程序。感谢您提供的信息,尽管我已经了解这些概念。【参考方案4】:

您还可以创建一个仅将渐变作为背景的活动,而屏幕上没有其他内容。

在模拟器或设备上运行应用,并使用 DDMS 进行屏幕截图。然后,您将保存一个渲染良好的 PNG,并且您可以通过改变您正在使用的模拟器的屏幕尺寸来创建您想要的任何尺寸。

您的 XML 可能如下所示:

<LinearLayout 
    android:layout_ 
    android:layout_ 
    android:background="@drawable/your_gradient">
</LinearLayout>

【讨论】:

感谢@Booger 的建议,不幸的是,这不会保持透明度。

以上是关于如何将 Android XML Drawable 保存、导出或转换为 PNG 图像文件?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何使用 XML drawable 创建精确的材料设计阴影

如何在android中使用xml drawable创建半圆形填充形状?

如何将ProfilePictureView更改为圆形图像。 Drawable无法正常工作

如何在Android drawable中为环形制作圆角

Android Animated Vector Drawable 无法在 xml 中循环

Android XML Drawable