2016-01-16 13 views
49

LayerListVectorDrawableをベクターのスケーリングなしで使用しようとしています。例えば:スケーリングせずにレイヤーリスト内のベクター描画可能領域を中央に配置する方法

<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> 

は、所望の効果は、スケーリングなしで、層描画可能でセンタリングされるチェックアイコンのためのものです。問題は、上のレイヤーリストは、レイヤーのサイズに合わせてチェックアイコンを拡大/縮小することです。

私は各濃度のために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を使用してこれを行うことができます方法はあります?

+7

これはAPI 21/22のバグであるようです。私はちょうどAPI 23デバイスでテストしたところ、ベクトル描画可能なものが正しく中央に配置されていました。 – ashughes

+0

あなた自身の質問に答えてそれを受け入れるべきです。そうすれば、それはもっと目に見えて、問題は答えられないようには現れない。 –

+1

API 21/22で何をすべきかについての回答がまだないため、私は質問に答えていません。私の一時的な解決策は、ベクターの代わりにPNGを使用することでした。まだベクトルを動作させる方法を見つけることを願っています。 – ashughes

答えて

8

レイヤーリストにベクターのドロワーブルを中心に置いて同じ問題が発生しました。

<?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、この例では24dpの第2の項目の埋め込みは、ベクトル画像を中央に配置します。 gravity="center"が、API 21にベクトルを使用して、その作業方法と

+1

これは、ドロアブルの中央に配置されたチェックドロウアブルで設定されたスペース全体を塗りつぶすのではなく、ドローカードの正確なサイズを知る必要があるように思えます(シェイプサイズを設定するため)。 – ashughes

+0

サイズを知ることはできませんが、この方法でパディングを変更することはできません。イメージビューでは、ドロアブルを重ねて重ねることができます。上で述べたように、API 21と22の 'gravity =" center "に対する完全な解決策はありません。 –

9

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> 

それが役に立てば幸い!

+13

API 21-22では、' width'属性がAPIレベルで利用できないので、これは役に立ちません。 API 23では、バグが修正され、ドロアブルがそれ以上伸ばされないため、これらは必要ありません。 – WonderCsabo

+0

これはもう動作しません! –

関連する問題