Android Vector Asset Studio为一些矢量图像提供额外的填充

时间:2015-11-11 14:37:05

标签: android android-layout

我尝试从Vector Asset Studio中的Material Vector包导入一些图标。

但他们带着填充物。

enter image description here

为什么会发生这种情况,如何将其删除?

这很不方便,因为这意味着如果我希望我的图标在XML中为17dp x 17dp,那么我需要设置它超过17x17以弥补填充。

4 个答案:

答案 0 :(得分:8)

您可以缩放一个可以删除额外空间的矢量。这可以使用group标记。只需修改vector xml文件即可。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">

    <path
        android:fillColor="#FF000000"
        android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z" />
</vector>

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">

    <group
        android:pivotX="12"
        android:pivotY="12"
        android:scaleX="1.5"
        android:scaleY="1.5">

        <path
            android:fillColor="#FF000000"
            android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z" />
    </group>
</vector>

结果

enter image description here

答案 1 :(得分:5)

您可以通过设置VectorDrawables {{1}来调整.SVG源图像(.PSDImageViews中可能包含的任何“隐式”填充}到适当的值,以便它可以处理秘密包含在android:scaleType源图像中的填充。您还需要设置VectorDrawables

例如,假设您的android:adjustViewBounds="true"在显示时在图像的开头有一些非常烦人的VectorDrawable。您不知道为什么会这样,因为您没有在padding上设置任何android:paddingStart ...您需要做的是将ImageView ImageViews设置为{{ 1}}和android:scaleTypefitStart

<强> TL;博士

调整android:adjustViewBounds true以处理ImageViews源文件(android:scaleTypeVectorDrawable)中包含的任何“隐式”填充。同时设置.SVG

快速示例:

.PSD

这将删除android:adjustViewBounds="true"开头的令人讨厌的“隐式”填充。

注意:根据您的渲染需求调整<ImageView android:id="@+id/vectorDrawable_imageView" <!--Other ImageView settings--> android:adjustViewBounds="true" android:scaleType="fitStart" app:srcCompat="@drawable/vector_with_implicit_padding_at_start" />

答案 2 :(得分:2)

此填充位于某些图标上,因此所有图标都可以正确对齐。例如,如果在该对话框中,您选择ic_3d_rotation_24dp,您将看到图标一直到边界的边缘。

PS如果你的目标是拥有all your sizes be a multiple of 8dp,那么事情会顺利排列并且看起来很棒。

答案 3 :(得分:1)

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="28"
    android:viewportHeight="28">
    <group
        android:translateX="2"
        android:translateY="2">
        <path
            android:fillColor="#8A333333"
            android:pathData="M13.12,2.06L7.58,7.6c-0.37,0.37 -0.58,0.88 -0.58,1.41V19c0,1.1 0.9,2 2,2h9c0.8,0 1.52,-0.48 1.84,-1.21l3.26,-7.61C23.94,10.2 22.49,8 20.34,8h-5.65l0.95,-4.58c0.1,-0.5 -0.05,-1.01 -0.41,-1.37 -0.59,-0.58 -1.53,-0.58 -2.11,0.01zM3,21c1.1,0 2,-0.9 2,-2v-8c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2v8c0,1.1 0.9,2 2,2z" />
    </group>
</vector>

android:viewportWidth + = android:translateX * 2(填充开始/结束)

android:viewportHeight + = android:translateY * 2(填充顶部/底部)