2016-01-16 16 views
49

Vektörü ölçeklemeden LayerList kullanmaya çalışıyorum. Örneğin: onay simgesi ölçeklendirilmeden, tabaka çekilebilir merkezli olmak içinVektör ölçeklendirme olmadan katman listesinde çekilebilir merkez nasıl oluşturulur

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

arzu edilen etkisi:

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

çekilebilir ic_check_white_48dp kimliği

olarak tanımlanır. Sorun şu ki, yukarıdaki katman listesi kontrol simgesinin katman boyutuna uyacak şekilde ölçeklenmesini sağlar.

I Her yoğunluk PNG vektör çekilebilir yerine ve bu şekilde tabaka listeyi değiştirmek halinde istenen etkiyi üretebilir:

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

Bunun bir VectorDrawable kullanarak yapabilir herhangi bir şekilde var ?

+7

Bu, API 21/22'de bir hata olabilir. Sadece bir API 23 cihazında test ettim ve çizilebilir vektör doğru şekilde merkezlendi. – ashughes

+0

Kendi sorunuza cevap vermeli ve kabul etmelisiniz. Bu şekilde daha görünür ve soru cevapsız görünmüyor. –

+1

Sorumu henüz yanıtlamadım çünkü henüz API 21/22'de ne yapacağım konusunda bir cevabım yok. Geçici çözümüm, vektörler yerine PNG'leri kullanmaktı. Yine de vektörlerin işe yaraması için bir yol bulmak umuduyla. – ashughes

cevap

8

Katmanlı bir listedeki vektör çizimlerini merkezlemeye çalışırken aynı soruna rastladım.

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

setleri yukarıdaki şeklin büyüklüğü:

tamamını çekilebilir bir boyutunu ayarlamak ve vektör öğesine dolgu eklemem gerekiyor, ben, onun tam olarak aynı değil geçici bir çözüm var ama işe yarıyor Bu örnekte tüm çekilebilir, 120dp boyutu, bu örnekte 24dp ikinci öğe üzerindeki dolgu, vektör görüntüsünü ortalar. gravity="center" ancak API 21 vektörleri kullanarak kendi çalışma tarzı ve

+1

Bu, çekilişin tam boyutunu (şekil boyutunu ayarlamak için) tanımlamanızı gerektiriyormuş gibi geliyor, bunun için ayarlanmış olan tüm alanı doldurmak için onun içine odaklanmak yerine. – ashughes

+0

boyutu bilmek mümkün değil ama bu yöntemle dolguyu değiştiremezsiniz, resim görüntülerinde birbirinin üstüne çizim yapabilirsiniz. Yukarıda belirttiğim gibi, API 21 ve 22'de "gravity =" center "' için mükemmel bir çözüm yoktur. –

9

22. kullanma gibi

Onun aynı değildir, aynı sorunla mücadele. Ben büyütmek için bu sorunu gidermek ve çekilebilir önlemek için bulunan tek yolu onu hizalamak için yerçekimi kullanılarak çekilebilir boyutunu ve set oldu:

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

yardımcı olur Umut!

+13

Bu API 21-22'de yardımcı olmaz, çünkü 'width' özelliği bu API düzeylerinde mevcut değildir. API 23'te bunlar gerekli değildir, çünkü hata düzeltildi ve çekilebilir artık esnetilmiyor. – WonderCsabo

+0

artık çalışmıyor! –