2011-01-27 22 views
228

Resimin görüntüsü res/drawable/test.png (R.drawable.test). Bu resmi Drawable kabul eden bir işleve iletmek istiyorum.
(örn mButton.setCompoundDrawables()) Kaynak oluşturulabilir Çizim

Peki bir Drawable bir görüntü kaynağı dönüştürmek için?

cevap

492

Etkinliğiniz, getResources yöntemine sahip olmalıdır. Do:

Drawable myIcon = getResources().getDrawable(R.drawable.icon); 
+0

Örneğin bildirime başka bir şey eklemeniz gerekiyor mu? OnCreate'da sadece bu kod satırıyla boş bir proje oluşturdum ve Kaynaklar $ NotFoundException aldım. Proje hdpi, ldpi ve mdpi haritalarında icon.png ile geldi. – Vincent

+1

Bunu bir Etkinlik sınıfının dışında görmek isterseniz, getResources() öğesinin bulunduğu İçerik'e ulaşmak için başka bir yol bulmanız gerekir; [Bu cevap yapıcıya aktarılmasını önerir] (http://stackoverflow.com/a/6214567/404960) – rymo

+34

API sürümü 21'den itibaren bu yöntem kullanımdan kaldırılmıştır ve şu şekilde değiştirilmelidir: Çizim çekilebilir = ResourcesCompat.getDrawable (getResources(), sayfa.getImageId(), boş); – Boren

0

görüntü olarak ayarlanır görünümden çekilebilir almaya çalışıyorsanız,

ivshowing.setBackgroundResource(R.drawable.one); 

sonra çekilebilir aşağıdaki kodla sadece boş değer dönecektir ...

Drawable drawable = (Drawable) ivshowing.getDrawable(); 

Bu nedenle, belirli bir görünümden çekilebilir olanı almak istiyorsanız, görüntüyü aşağıdaki kodla ayarlamak daha iyidir.

ivshowing.setImageResource(R.drawable.one); 

ancak o zaman çekilebilir tam olarak dönüştürülmüş olacaktır.

20

getDrawable (int id) yöntem Bunun yerine Kod böyle bir şey olmazdı API 21+

için getDrawable (int id, Resources.Theme theme) kullanmalıdır 22.

API olarak amortismana tabi tutulur.

Drawable myDrawable; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    myDrawable = context.getResources().getDrawable(id, context.getTheme()); 
} else { 
    myDrawable = context.getResources().getDrawable(id); 
} 
+0

neden her API için boş değil? Artı: En iyi seçeneğin boş olduğundan emin misin? – jonathanrz

+1

GetDrawable (int id, Resources.Theme teması) API 21'e kadar gelmedi. – ChrisStillwell

98

Bu kod kullanımdan kaldırılmıştır.

Drawable drawable = getResources().getDrawable(R.drawable.icon);

kullanın bu instad.

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon); 
+6

Temanın belirtilen bağlamdan uygulanacağının farkında olun. Hiçbir temanın kullanılmadığından emin olmak istiyorsanız 'ResourcesCompat.getDrawable (getResources(), R.drawable.icon, null);' (3. paramın isteğe bağlı bir Tema örneği olduğu) kullanabilirsiniz. – vaughandroid

9

Sadece getDrawable (...) kullanırken mesaj "deprecated" alıyorsanız eğer yerine destek kitaplığından aşağıdaki yöntemi kullanması gerektiğini eklemek istiyorum.

ContextCompat.getDrawable(getContext(),R.drawable.[name]) 

Bu yöntemi kullanırken getResources() yöntemini kullanmanız gerekmez.

Bu Bu, hem öncesi ve sonrası Lollipop sürümlerinde çalışır

Drawable mDrawable; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]); 
} else { 
    mDrawable = getResources().getDrawable(R.id.[name]); 
} 

böyle bir şey yaptığını eşdeğerdir.

İlgili konular