ベクトルをスケーリングせずにVectorDrawable
でLayerList
を使用しようとしています。例えば:
<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
を使用してこれを行う方法はありますか?
レイヤードリストにベクタードロウアブルを集中させようとすると、同じ問題に遭遇しました。
私は回避策を持っていますが、まったく同じではありませんが動作します。ドロアブル全体のサイズを設定し、ベクターアイテムにパディングを追加する必要があります:
<?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でベクターを使用する作業方法です。
同じ問題に苦労しています。これを修正し、ドロウアブルのスケールアップを回避する唯一の方法は、ドロウアブルのサイズを設定し、重力を使用してそれを整列させることでした:
<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>
それが役に立てば幸い!