Как сохранить, экспортировать или конвертировать Android XML Drawable в виде файла изображения PNG? - PullRequest
9 голосов
/ 15 декабря 2011

У меня есть градиент, который мне действительно нравится, но я создал его с помощью XML drawable:

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

Каков будет простой способ создать это в png или что-то подобное?

Что я действительно ищу, так это: инструмент, который может и инструкции, использующие этот инструмент для создания градиентов, используя формат #aarrggbb в качестве входного альфа / цвета (угол 90 градусов, углы в целом, будет плюсом)

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: D'Oh! Я только что понял, ImageMagick должен быть в состоянии сделать это. В скором времени я опубликую код, который является моим ответом, если кто-то не хочет побить меня и получить всю награду!

Ответы [ 4 ]

3 голосов
/ 29 декабря 2011

В конце концов, это был один лайнер, использующий ImageMagick !

Не могу поверить, что раньше не думал использовать ImageMagick, Дух !!!

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

Для справки, я использовал это, чтобы создать файл изображения .png, используя мои Android XML drawable ## AARRGGBB значения.ImageMagick FTW !!!

Спасибо всем за участие.

3 голосов
/ 15 декабря 2011

Используйте такие программы, как photoshop или paint.Net - они оба имеют инструменты градиента и должны позволять вам устанавливать цвета в том же формате, что и у вас.

2 голосов
/ 16 декабря 2011

Попробуйте:

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 с использованием шестнадцатеричных значений. Байт (8 бит) доступен для каждого значения цвета в шаблоне ARGB (всего 32 бита). A означает Alpha, R означает Red, G для Green и B для Blue. Каждый компонент может иметь значения между (0, 255). Обратите внимание:

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

Так что, если вы хотите белый цвет с непрозрачным 'Альфа (no transparency) you would use # FFFFFFFF . For Black # FF000000 . For Grey # FF808080 . 80 is hex value of decimal 128 and gives you half of full intensity white. so 80`, вы получите медианный серый.

Используйте шестнадцатеричную арифметику, чтобы получить значения десятичных цветов.

AFAIK, Угол радиального градиента не должен иметь никакого значения. Попробуйте все это в GIMP или прочитайте учебники GIMP. Лучше по-прежнему использовать Photoshop, если можете (доступны 90-дневные пробные версии).

1 голос
/ 15 декабря 2011

Вы также можете создать действие, используя только градиент в качестве фона, и ничего больше на экране.

Запустите приложение на эмуляторе или устройстве и используйте DDMS, чтобы сделать снимок экрана. После этого у вас будет прекрасный рендеринг PNG для сохранения, и вы можете создать любой размер по своему желанию, изменяя размер экрана используемого вами эмулятора.

Ваш XML может выглядеть так:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/your_gradient">
</LinearLayout>
...