首先创建MDPI drawable,然后根据photoshop中的像素按比例缩放.075 / 1.00 / 1.50/2比例,还是重新创建每个可绘制的?
最好是从高质量图像开始并开始缩小图像或从MDPI图像开始并将其放大?
这就是我的所作所为:
使用320x480 porportions和160分辨率在photoshop中创建mdpi图像。只需输入120,160,240或320作为分辨率,即可保存4张图像并更改分辨率。
答案 0 :(得分:6)
来自Android设计指南:
<强>策略强>
那么在设计多个屏幕时你会从哪里开始? 一种方法是使用基本标准(中等大小,MDPI)和 为其他桶扩大或缩小。另一种方法是 从具有最大屏幕尺寸的设备开始,然后进行缩放 下来并找出你需要在较小的上做出的UI妥协 屏幕。
有关此主题的更多详细信息,请查看Supporting Multiple Screens.
答案 1 :(得分:5)
Icon Design Guidelines的设计师提示部分提供了以下建议:
尽可能使用矢量形状
如果可能的话,使用矢量形状,以便在需要时,可以按比例放大资产,而不会丢失细节和边缘清晰度。从大型画板开始
因为您需要为不同的屏幕密度创建资源,所以最好在尺寸为目标图标大小的倍数的大型画板上启动图标设计。例如,启动器图标的宽度为96,72,48或36像素,具体取决于屏幕密度。如果您最初在864x864画板上绘制启动器图标,则在将画板缩小到最终资产创建的目标尺寸时,调整图标会更容易,更清晰。
该部分还有许多其他不错的提示。我认为这对其他可绘制类型也很好(菜单图标,背景等)。
答案 2 :(得分:1)
我通常开始变大,然后变小。
我发现powerpoint实际上是一个非常好的工具,可以为我的应用程序创建资源。所有图形都是矢量图,因此它们可以向上和向下扩展而不会有任何质量损失。
如果没有其他原因,我倾向于从大的开始,而不是更容易使用看起来更大的东西。当我移动到较小的那些我通常放大一些来补偿。
powerpoint中的任何图形对象都允许您右键单击它并选择“另存为图片”,然后将其输出为png文件。如果需要的话,唯一剩下的就是把它放到draw9patch中。
答案 3 :(得分:1)
我使用Inkscape,也使用矢量图像,然后导出到各种分辨率所需的光栅大小。我写的一篇关于从Inkscape生成图标的文章可以在https://tekeye.uk/android/android-launcher-icons-using-inkscape
找到答案 4 :(得分:0)
最佳方式:创建高分辨率图像,然后缩小它们。
如果你使用Photoshop,它将是一块蛋糕!
我的分叉版Output Android Assets.jsx脚本自动执行所有dpi的缩减过程: - )
只需点击一下,它就会创建:
所以,只需创建xxxhdpi图像,然后使用脚本缩小它们。
创建初始高分辨率图像的宽度和高度为 16的倍数是明智的,因为它们正确缩小,如下表所示:
ldpi mdpi tvdpi hdpi xhdpi xxhdpi xxxhdpi
0,75 1 1,33 1,5 2 3 4
3 4 5,33 6 8 12 16
6 8 10,67 12 16 24 32
9 12 16 18 24 36 48
12 16 21,33 24 32 48 64
15 20 26,67 30 40 60 80
18 24 32 36 48 72 96
21 28 37,33 42 56 84 112
24 32 42,67 48 64 96 128
27 36 48 54 72 108 144
30 40 53,33 60 80 120 160
etc....
希望这有帮助
注意:强>
tvdpi 是一种罕见的情况,所以我真的不关心它有时缩小到&#34; 没有整数&#34;值。
<强>现金:强>
答案 5 :(得分:0)
我建议在powershell中为Inkscape写一个小脚本。
示例:
将Inkscape放入&#34; c:\ bin \ inkscape&#34; (dir没有任何空格)并以mdpi(1x)分辨率绘制所有图像。
在Inkscape对象属性框中(即xml中的id),为要在png中导出的每个对象指定一个Id名称。
将您的SVG保存到&#34; C:\用户\罗内\图片\设计安装MyApps-forscript.svg&#34;
创建一个目录&#34; d:\ temp&#34;。
将此脚本放入&#34; C:\ app \ scripts \&#34;
Powershell脚本名称是&#34; inkscape_to_png.ps1&#34; :
param (
$inkscape_dir="C:\bin\Inkscape\",
$inkscape_bin="inkscape.exe",
$img_id="",
$fichier_svg="C:\Users\rone\Pictures\design-MyMap-forscript.svg",
$tmp_dir="d:\temp\"
)
$inkscape=$(Resolve-Path "$inkscape_dir\$inkscape_bin")
function getWidthHeight($img_id) {
$size=@{}
$old_pwd=$pwd.path
cd $inkscape_dir
write-host -foreground yellow "détermine la taille de $img_id"
$size.width=invoke-command {./inkscape --file=$fichier_svg --query-id=$img_id --query-width 2>$null}
$size.height=invoke-command {./inkscape --file=$fichier_svg --query-id=$img_id --query-height 2>$null}
write-host -foreground yellow "width : $($size.width)"
write-host -foreground yellow "height : $($size.height)"
cd $old_pwd
return $size
}
function convertTo($size, $format) {
$rsize=@{}
if ($format -eq "MDPI") {
$rsize.width=[int]$size.width*1
$rsize.height=[int]$size.height*1
} elseif ($format -eq "LDPI") {
$rsize.width=[int]$size.width*0.75
$rsize.height=[int]$size.height*0.75
} elseif ($format -eq "HDPI") {
$rsize.width=[int]$size.width*1.5
$rsize.height=[int]$size.height*1.5
} elseif ($format -eq "XHDPI") {
$rsize.width=[int]$size.width*2
$rsize.height=[int]$size.height*2
} elseif ($format -eq "XXHDPI") {
$rsize.width=[int]$size.width*3
$rsize.height=[int]$size.height*3
} elseif ($format -eq "XXXHDPI") {
$rsize.width=[int]$size.width*4
$rsize.height=[int]$size.height*4
}
write-host -foreground yellow "après conversion : $format"
write-host -foreground yellow "width : $($rsize.width)"
write-host -foreground yellow "height : $($rsize.height)"
return $rsize
}
function inkscape_convert() {
$mdpi_size=getWidthHeight $img_id
write-host -foreground gray "----------------------------------------"
"MDPI,LDPI,HDPI,XHDPI,XXHDPI,XXXHDPI" -split ","|% {
$new_size=convertTo $mdpi_size $_
if ($new_size.width -eq 0 -or $new_size.height -eq 0) {
write-host -foreground red "erreur lors de la recherche de la taille de l'image"
exit
}
$w=$new_size.width
$h=$new_size.height
$dir="$tmp_dir\drawable-$($_.toLower())"
if (-not $(test-path $dir)) {
write-host -foreground yellow "création du répertoire $dir"
mkdir $dir
}
$new_file_name="$dir\$($img_id).png"
$cmd="$inkscape -z -i $img_id -j -f $fichier_svg -w $w -h $h -e $new_file_name"
write-host -foreground gray $cmd
invoke-expression -command $cmd
if ($? -eq $true) {
write-host -foreground yellow "conversion OK"
}
}
write-host -foreground gray "----------------------------------------"
}
inkscape_convert
现在,请将此脚本称为此示例:
@("btn_button_name_1","btn_button_name_3","btn_other", "btn_zoom", "btn_dezoom", "btn_center", "btn_wouwou", "im_abcdef", "ic_half", "ic_star", "ic_full") | % { C:\app\scripts\inkscape_to_png.ps1 -img $_ -f design-MyMap-forscript.svg }
脚本将在d:\ temp \ drawable-xyz ...中创建所有分辨率(ldpi,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi)的所有drawable ...
节省时间。
答案 6 :(得分:0)
从Android L开始,有一个VectorDrawable,它类似于SVG中的SHAPE,但是采用Android的XML风格
请参阅Android文档:
https://developer.android.com/training/material/drawables.html#VectorDrawables
答案 7 :(得分:0)
看起来Android Studio中有一个工具:
在项目视图中展开项目文件夹&gt;右键点击应用&gt;新&gt;图像资产
图标类型:操作栏和标签图标
资产类型:图片
为原始图片选择路径(它应该很大)
形状无(使背景透明)
它将在适当的可绘制文件夹中生成图像。