在Android中使用矢量图标

时间:2012-12-24 04:35:18

标签: android xml android-actionbar android-imageview vector-graphics

前言:

我已经考虑过把它放在graphicdesgin.stackexchange.com上,但我得出的结论是我的Android特定问题可能不是最适合它的地方。这就是我选择stackoverflow的原因,因为它似乎更像是Android imageViews然后是图形本身的问题。谢谢。



我需要在Android应用程序中使用一些基本图标。我有Illustrator和Photoshop(在任何一个都不是很好,但我可以顺利)。我偶然发现http://www.androidicons.com/,我看到很有可能为我节省了25个小时的时间。为了了解在我的应用程序中使用它们需要做些什么,我下载了免费的“BONUS ICONS 01”包。

enter image description here

我决定尝试使用时钟图标,看看它在我的应用程序中是如何工作的。我在Illustrator中将图标放大到大约800px,然后将其复制并粘贴到Photoshop中。我把它保存为.png然后我创建了一个示例应用程序来测试它。

图像只放入xhdpi文件夹,因为我可能会将此图标用于比操作栏更大的内容,但不会占用整个屏幕。我的想法是,如果你要为所有单独的dpi级别创建操作栏图标,那么你必须确切地知道你将要制作它们的大小(以像素为单位),因此它们看起来都非常好(例如,如果您从谷歌下载操作栏图标,他们会以几种尺寸向您提供,而不仅仅是一种尺寸。 但是,如果他们将被用于比那更大的东西呢?我怎么知道要制作它们的尺寸。

真实地表达我对如何无法理解这个主题的沮丧。这是我的应用程序的代码,以及它最终看起来像我的Galaxy Nexus的结果。较大的图标很好,而较小的图标看起来不那么清晰。 我该如何解决这个问题?在Illustrator中制作图像并使用Photoshop并确保它们在任何尺寸下看起来都很合适的正确方法是什么?

此致

无法理解图形的Android开发人员。

enter image description here

正如你所看到的那样,当图像很大时,它看起来看起来很不错,但是当图像较小时使用它会导致IMO出现一些问题。有办法解决这个问题吗?我太挑剔了吗?即使我将它调整为更小,并将其放入mdpi,我的布局是否会选择它?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center|center_horizontal" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/anti_huge"
                android:layout_weight="1" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/anti_huge"
                android:layout_weight="1" />
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/anti_huge"
                android:layout_weight="1" />
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/anti_huge"
                android:layout_weight="1" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center|center_horizontal" >

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/anti_huge" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

问题摘要:

  1. 但是,如果他们将被用于更大的东西呢? 那? (“that”= ActionBarIcons)
  2. 我怎么知道什么尺码 制作它们? (ActionBarIcons是由Google提供给我的 像素尺寸,他们如何计算这些尺寸)
  3. 我该如何解决这个问题? (测试应用程序上的大图标看起来很好,而 较小的看起来参差不齐)
  4. 制作图像的正确方法是什么? Illustrator并转向Photoshop并确保它们看起来很棒 在任何尺寸他们被使用?
  5. 有什么方法可以解决这个问题吗?
  6. 我也是 挑剔? (请告诉我,我......这场考验正在扼杀我。)
  7. 即使我将它重新调整为更小,并将其放入mdpi,我的布局也是如此 甚至选择了吗?

2 个答案:

答案 0 :(得分:3)

你做得不对;)

Android会根据最接近的匹配对图像进行缩放。如果您只提供一个(非常大的)位图,那么Android会将其缩放到您请求的较小尺寸。如果按照这种方式进行,你将失去抗锯齿功能,图标看起来就像你的那样。

想要做的是将png导出到使用它时实际需要的(物理)尺寸,然后导出到所需的屏幕密度。

可点击区域的最小建议大小为40x40dp,相当于1/4“方形。有可能,你会使用10%的边框,所以你最终得到mdpi中的32x32像素图标。

所以,现在你渲染你的矢量图像在32x32中为mdpi(160dpi),24x24为ldpi(120dpi),48x48为hdpi(240dpi)和64x64为xhdpi(320dpi)。

如果您想要更大的相同图标,请将其渲染为单独的资源。假设你想要一个2x2的时钟水印,你将以320x320px渲染mdpi等等。

您在布局中将图像指定为200dp x 200dp,Android将根据设备分辨率在屏幕上提取正确的图像。

对于某些重复渲染,我使用Android Asset Studio。您可以设置颜色,图标,效果等,它允许您下载所有分辨率的一组图标。

答案 1 :(得分:2)

ActionBar图标的大小在Android开发者的Action Bar Icons部分中指定。

你把

  • 项目的xhdpi资源文件夹中的48x48像素图标
  • hxpi文件夹中的36x36
  • mdpi文件夹中的24x24图标

但如果我理解你的问题,你想知道如何拍摄其中一张图片并创建一个大版本,例如作为活动背景:

  • 首先,您需要图像的矢量版本。在Illustrator中打开它。
  • 选择dpi作为起点,比如说hdpi。从Illustrator创建一个png文件,其大小在hdpi设备上看起来很好。这是一种美学选择,没有对错。假设它的尺寸为300 x 300像素。
  • 如果您希望在hdpi设备上查看图像,请将该图像放在项目的hdpi资源文件夹中。
  • 创建一个0.75倍大小的mdpi文件夹版本,即225 x225像素。
  • 创建一个1.5倍xhdpi文件夹大小的版本,即450 x 450像素。

如何在插图画家中执行此操作:

  • 创建/打开矢量图像。
  • 文件&gt; Save for Web&amp;设备
  • 选择图像大小选项卡,然后输入100%的hdpi
  • 保存。 重做75%的mdpi和150%的xhpdi。

enter image description here