web-dev-qa-db-ja.com

スケーリングせずにレイヤーリストでベクトル描画可能を中央に配置する方法

ベクトルをスケーリングせずにVectorDrawableLayerListを使用しようとしています。例えば:

<layer-list>
    <item Android:drawable="@color/grid_item_activated"/>
    <item Android:gravity="center" Android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

次のように定義されたドロアブルic_check_white_48dp id:

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:width="48dp"
        Android:height="48dp"
        Android:viewportWidth="24.0"
        Android:viewportHeight="24.0">
    <path
        Android:fillColor="#FFFFFFFF"
        Android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

望ましい効果は、スケーリングなしで、ドローアブルの中央にチェックアイコンがあることです。問題は、上記のレイヤーリストにより、チェックアイコンがレイヤーサイズに合わせて拡大縮小されることです。

I can密度ごとにベクトルドロアブルをPNGに置き換え、レイヤーリストを次のように変更すると、望ましい効果が得られます。

<layer-list>
    <item Android:drawable="@color/grid_item_activated"/>
    <item>
        <bitmap Android:gravity="center" Android:src="@drawable/ic_check_white_48dp"/>
    </item>
</layer-list>

VectorDrawableを使用してこれを行う方法はありますか?

79
ashughes

レイヤードリストにベクタードロウアブルを集中させようとすると、同じ問題に遭遇しました。

私は回避策を持っていますが、まったく同じではありませんが動作します。ドロアブル全体のサイズを設定し、ベクターアイテムにパディングを追加する必要があります:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape>
            <size Android:height="120dp" Android:width="120dp"/>
            <solid Android:color="@color/grid_item_activated"/>
        </shape>
    </item>
    <item Android:top="24dp"
          Android:bottom="24dp"
          Android:left="24dp"
          Android:right="24dp"
          Android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

上記のシェイプのサイズは、ドロアブル全体のサイズを設定します。この例では120dp、2番目のアイテムのパディング、この例では24dpは、ベクトル画像を中央に配置します。

gravity="center"を使用するのと同じではありませんが、API 21および22でベクターを使用する作業方法です。

19
Nicolas Tyler

同じ問題に苦労しています。これを修正し、ドロウアブルのスケールアップを回避する唯一の方法は、ドロウアブルのサイズを設定し、重力を使用してそれを整列させることでした:

<layer-list>
    <item Android:drawable="@color/grid_item_activated"/>
     <item
        Android:gravity="center"
        Android:width="48dp"
        Android:height="48dp"
        Android:drawable="@drawable/ic_check_white_48dp"/>
</layer-list>

それが役に立てば幸い!

11
Felipe Duarte