2010-08-18 9 views
9

Tengo un ImageView en mi escena que me gustaría establecer el origen de dinámicamente basado en la entrada del usuario.establecer fuente de ImageView dinámicamente android

Digamos que tengo 4 imágenes en mi carpeta dibujable: aaa.png, bbb.png, ccc.png y ddd.png.

Cuando mis cargas de aplicaciones que establecen la imagen en: aaa.png

myImageView.setImageResource(R.drawable.aaa); 

Ahora tengo una EditarTexto donde un usuario puede escribir en la acreditación y quiero cambiar la fuente de imagen para ser el bbb.png , o el usuario ingresa ccc, cambia la fuente a ccc.png, etc.

¿cómo puedo establecer dinámicamente el parámetro en setImageResource()? Intenté jugar con el objeto Drawable inútilmente ...

Respuesta

2

Si desea permitir el ingreso de texto abierto, deberá usar raw assets para buscarlos por nombre de cadena (consulte la nota al margen en esa página), o bien utilizar Java reflection mágico para recuperar un campo de la clase R por nombre. Alternativamente, puede mantener un HashMap de cadenas de valores enteros de R.drawable y buscarlo, pero luego debe mantener ese hashmap.

+0

Creo que el hashmap es lo que terminaré haciendo. Sin embargo, al respecto, si se agregan activos, ¿cambian (aumentan) los valores enteros de los activos existentes? ¿O permanecerían igual? – Kyle

+0

Recursos, ¿quieres decir? R.ids se vuelve a compilar automáticamente en constantes y tiempo de compilación, y definitivamente no se debe intentar acceder a ellos mediante un número codificado. Solo usa las constantes del archivo R.id y estarás bien. –

0

Si solo quieres que se muestren las imágenes que has cargado en tus objetos dibujables, puedes usar un Spinner donde el ID para el elemento está configurado para ser el recurso para el Drawable. Eso sería más fácil de tu parte y más fácil para el usuario.

0

Si desea utilizar reflexiones echar un vistazo al siguiente código:

R.drawable ourRID = new R.drawable(); 
         Field photoNameField = ourRID.getClass().getField("aaa"); 
myImageView.setImageResource(photoNameField.getInt(ourRID)); 

espero que ayude.

Cuestiones relacionadas