2011-02-02 17 views
11

Tengo un problema al configurar la imagen de fondo de LinearLayout en la carpeta de activos.Cómo establecer la imagen de fondo de la carpeta de activos en android?

String filePath="file:///android_asset/images/test.png"; 
    Drawable d = Drawable.createFromPath(filePath); 
    frontTextView.setBackgroundDrawable(d); 

¿Alguien me puede ayudar.

+0

¿Cuál es el problema? ¿Se está bloqueando la aplicación? Por cierto, ¿por qué estás usando la carpeta de activos en lugar de la carpeta 'res/drawable'? –

+0

No muestra nada. No puedo usar res/drawable ya que tengo que cambiar dinámicamente el fondo de Linearlayout. – Altaf

+0

Realmente, tal vez necesites la carpeta de activos para otro propósito, pero puedes cambiar el fondo dinámicamente simplemente usando la carpeta 'res/dibujable':' setBackgroundResource (R.id.bg1); setBackgroundResource (R.id.bg2) ' –

Respuesta

16

Ok, en el caso de cualquier otra persona tropieza aquí, con este mismo problema en el que desea establecer el fondo de una vista de una imagen que se encuentra en los activos:

Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 

y luego otra vez en algún punto de vista de que sólo es compatible con dibujables como fondo.

+0

Me gusta que hayas hecho un solo trazador de líneas :) –

8

Por lo que yo sé, you cannot access assets directly como usted está tratando de hacerlo. Tendrá que utilizar la clase AssetManager para obtener sus datos si desea almacenarlos como un activo. Here's a pretty decent blog post explicando un poco sobre recursos y activos, aunque la documentación oficial también es un buen recurso, por supuesto.

También agregaré, sin embargo, que las imágenes de fondo se almacenan mejor en res/drawable y se accede utilizando el estilo R.drawable.* (la publicación del blog vinculada anteriormente también lo trata) siempre que sea posible. Sin embargo, no está muy claro por qué necesita hacerlo de la muestra del código provisto, así que supongo que esa es su última llamada.

2

EDIT: añaden a crear una imagen de InputStream ...

que tenían el problema similar usando ImageButton. Lo descubrí cargando el mapa de bits de los activos y usándolo como imagen para ImageButton. Probablemente no sea un buen enfoque, pero está funcionando y resolvió mi problema: imposibilidad de tener subcarpetas en dir dibujables y caracteres no permitidos en nombres de archivo.

(Sí, puedo usar el prefijo en lugar de subdirectorio, y renombrar archivos para que coincida con el patrón (sólo minúsculas y números) y probablemente lo haré más adelante.)

InputStream is = null; 
try { 
    is = this.getResources().getAssets().open("Images/Fruits/Apple.png"); 
} catch (IOException e) { 
    Log.w("EL", e); 
} 

Bitmap image = BitmapFactory.decodeStream(is); 

ImageButton ib2 = (ImageButton) findViewById(R.id.imageButton2); 
ib2.setImageBitmap(image); 
+0

Eso está bien, pero ¿de dónde viene la variable 'imagen'? Presumiblemente lo obtienes del 'es' de alguna manera? –

+0

Puede crear imágenes a partir de la secuencia de entrada ... Imagen de mapa de bits = BitmapFactory.decodeStream (es); – CoPLaS

Cuestiones relacionadas