2016-01-16 84 views
49

我試圖在LayerList中使用VectorDrawable而不縮放矢量。例如:如何將矢量繪製在層列表中而不縮放

<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,這個例子使矢量圖像居中。

它不一樣的使用gravity="center"但在API使用21向​​量的其工作方式和22

+1

這聽起來像是要求你知道drawable的確切尺寸(爲了設置形狀的大小),而不是讓它填充它設置的整個空間,並在其中居中放置檢查drawable。 – ashughes

+0

有可能不知道大小,但是您不能使用此方法更改填充,您可以在圖像瀏覽中將可繪製的圖層放在彼此的頂部。正如我上面所說,在API 21和22中沒有針對「gravity =」center「的完美解決方案。 –

9

一直由同一個問題所困擾。我發現解決這一問題,避免被拉伸以擴大的唯一方法是設置可繪製的大小和利用重力對準它:

<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上,這些不是必需的,因爲錯誤是固定的,並且drawable不再被拉伸。 – WonderCsabo

+0

它不工作了! –

相關問題