2011-03-14 19 views
50

Nesne (oyuncu) alan bir bileşik ui öğesi yapıyorum ve bu oynatıcının oynadığı takım için ilgili görüntüyü seçmek istiyorum (oynatıcı nesnesinin görüntü numarası için bir dize değeri var. projemin kaynakları klasörüAndroid'de programlı olarak nasıl bir ImageViews kaynağı ayarlayabilirim?

Her bir oyuncu için doğru kaynağı nasıl belirleyebilirim.İki ve çok sayıda (dize değerini kontrol etme) ve res.getDrawable (R.drawable) kullanarak büyük miktarda yazma .no1) vb yoksa kaynağına yolunu belirtmek için bir şekilde bir dize kullanabilirsiniz daha zarif bir çözüm yoktur

bir Harita katarlar ve görüntü arasındaki ilişkiyi koyardım

cevap

88

:?

dizeleri (önce durumda benzeri) görüntüden daha aynı ada sahip

ImageView image; 
image.setImageResource(map.get("blah")); 

Veya, bu yöntemi kullanarak kaynak yükleyebilirsiniz:

Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put("blah", R.drawable.blah); 
// etc... 

Sonra setImageResource(int) yöntemi kullanabilirsiniz: Android and getting a view with id cast as a string

+0

Darn, 26 saniyeden sonra beni yendi :) –

+1

@MohitDeshpande: hahahahahaha her zaman olur. – Cristian

+1

Evet, bu harika çalışıyor. R.etc'in geri döndüğünü unuttum:/Teşekkürler! – blackaardvark

3

sana bir dizeden bir görüntü kaynağı görüntülemek istediğiniz, doğru anlamak. Bunu, kullanıcının özel bir ListPreference'dan bir görüntü seçebileceği ve MainActivity düzeninde görüntülendiği bir uygulamada yapıyorum. Çizilebilir kaynak kimliği, Paylaşılabilir Kaynak Kimliği (String) örneğiyle eşleşen bir dize olarak SharedPreferences içinde saklanır: "@ drawable/logo_image".

SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE); 
      String logo_id = (shared.getString("pref_logo","")); 

Bu, örn çekilebilir/LOGO_IMAGE @ bir String olarak çekilebilir kaynak döndürür: Birlikte ListPreference değerini çıkarın. Sonra düzeni içine çekilebilir/Resim eklemek için kullandığım:

ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo); 
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")); 

Bu bir kimlik (int) döndürür aşağıdaki yöntemle döndürülen int den kullanılarak) (setImageResource ile yeni çekilebilir için ImageView kaynak değişecek com.yourpackage drawable kaynak temsil eden bir dize:

getResources().getIdentifier(logo_id, "drawable", "com.yourpackage") 

Ayrıca kimliği olarak almak için bu yöntemi kullanmak vb Düzen arka planı olarak çekilebilir böyle kullanan diğer kaynaklar değiştirmek için bu aynı yöntemi sadece adres kullanabilirsiniz int:

getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 
İlgili konular