在矢量图标

时间:2017-05-28 04:55:13

标签: android svg icons android-vectordrawable

我是android studio的新手,并计划为平板电脑和手机设计应用程序。因此,我的应用程序将主要用于普通和大屏幕。

  • 哪个dpi最适合我的矢量图标?
  • 我应该为多个屏幕支持制作相同图标的不同dpi版本吗?
  • 为什么只使图标wrap_content不支持多种屏幕尺寸。我认为矢量图像在变形时不会变得模糊。

3 个答案:

答案 0 :(得分:1)

Vector Drawables

顾名思义,矢量绘图基于矢量图形,与光栅图形相反,矢量图形是一种使用几何形状描述图形元素的方法。它类似于SVG文件。在Android Vector Drawable中创建为XML文件。现在无需为mdpihdpixhdpixxhdpixxxhdpi等创建不同大小的图片。我们只需要一个矢量文件用于多个屏幕尺寸设备。此外,对于不支持矢量绘图的旧版Android,Vector Asset Studio可以在运行时将矢量绘图转换为每个屏幕密度的不同位图大小。

越小越好

对于Android,将VectorDrawable转换为位图的光栅化过程在CPU上进行。因此,创建图像所需的处理时间与图像本身的分辨率/尺寸之间通常存在线性关系。将三角形栅格化为16x16像素纹理可能仅需要计算总共8-12个像素的颜色片段。对1024x1024纹理进行相同操作会触及十万个像素,这显然需要更多时间。 因此,随着您创建的纹理尺寸变大,将会成为一个收支平衡点,其中加载时间变得非常重要,并且使用Vector Drawable不再有意义。

答案 1 :(得分:1)

" dpi"对于矢量图标是没有意义的。矢量图标是DPI独立的。这就是他们的全部观点。你设计它们的大小并不重要。它只会影响你在运行时绘制(渲染)它们的大小。显示的尺寸越大,必须计算和绘制的像素越多。

这是@ muhammad-younas的第二段回答(来自this Colt McAnlis blog)试图说的。

答案 2 :(得分:0)

我使用InkScape进行编辑并保存SVG文件(矢量图像)。从理论上讲,它适合任何规模的扩展。理论上...

Android Studio 中,我使用NewVector Asset,然后选择SVG文件,它会在{下创建一个XML文件{1}文件夹下的{1}}文件夹。但是有时候,没有任何说明,图像在我的手机中变得模糊(在 Android Studio 预览中没有模糊)。太疯狂了。

我已经尝试了一切,并且只有一个动作解决了我的问题:

我决定直接在 Android Studio 中更改drawables文件。我读了一些关于resXML规格(图像大小)与widthheight(手机中图像的实际大小)的信息

所以我决定按比例扩大第一对viewportWidthviewportHeight

例如,一张模糊的图像具有:

width

我将height放在脑海中,所以我制作了<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="6.415605dp" android:height="5.33568dp" android:viewportWidth="6.415605" android:viewportHeight="5.33568"> .... </vector> 。因此,我将第一对中的两个数字都乘以width = 25dp。因此,我有了25 / 6.415605 = 3.896753.89675的新值。

这只是一个随机的猜测。重要的是要使widthheightwidthheight大得多,并保持比例。

viewport width

它就像一种魅力...