2011-02-03 19 views

Respuesta

97

Esperanza esta ayuda:

Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null); 
+0

Solo me pregunto, ¿el archivo está cerrado automáticamente para usted? Por seguridad, actualmente le doy a una variable el retorno de open(), luego la cierro manualmente. –

+0

@DatVM no, no cierra automáticamente la intensidad de entrada. Creé una clase con método estático para obtener el dibujable de los activos y lo agregué como una respuesta separada a continuación. –

-1

En esta versión no puede, si hace una subcarpeta dentro de su carpeta dibujable no puede usarla en su archivo xml, no se reconocerá cuando use android: src.

Tome un vistazo a este tema: Can the Android drawable directory contain subdirectories?

+0

En ese caso, ¿cuál es la forma más fácil de cargar un par de cientos de mosaicos de mapas personalizados para mostrar en la pantalla? – Jamie

+0

Ah, mi pregunta es sobre la carpeta de activos, no el dibujable. Pregunta editada. – Jamie

+0

Esta respuesta no está actualizada ahora que la pregunta se ha actualizado. – styler1972

2

sí se puede crear un objeto a partir de una DrawableInputStream utilizando el método createFromStream().

+0

¿es posible para los dibujables en la carpeta dibujable también? Si es así, ¿cómo? –

+0

@chiragshah No entiendo. El sistema convierte las imágenes en el directorio dibujable por usted. –

+0

Necesito una forma rápida de cargar imágenes desde la carpeta de activos ya que tengo un montón de mosaicos de mapas con los mismos nombres pero con diferentes directorios. – Jamie

5

recomiendo utilizar este

Drawable.createFromResourceStream(resources,new TypedValue(), resources.getAssets().open(filename), null) 

que devuelve correctamente escalado dibujable gracias a los recursos ...

+0

warrning: este método causa una excepción en HTC Desire HD, no me preguntes por qué ... – David

0

Esto ayudó a conseguir la densidad adecuada

private Drawable drawableFromAssetFilename(String filename) { 
    AssetManager assetManager = mApplicationContext.getAssets(); 
    InputStream inputStream = null; 
    try { 
     inputStream = assetManager.open(filename); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 

    BitmapDrawable drawable = new BitmapDrawable(mApplicationContext.getResources(), bitmap); 
    return drawable; 
} 
1

Aquí está la función que hace esto por usted.

Compruebe la variable Drawable devuelta para null, ya que null puede regresar si la ruta de acceso no es válida o si hay una IOException.

public static Drawable getDrawableFromAssetFolder(String fullPath, Activity ctx) { 
    Drawable d =null; 
    try { 
     d = Drawable.createFromStream(ctx.getAssets().open(fullPath), null); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return d; 
} 
2

Aquí hay una clase con método estático para obtener el dibujable de los activos. También cierra el inputstream.

import android.content.Context; 
import android.graphics.drawable.Drawable; 

import java.io.IOException; 
import java.io.InputStream; 

/** 
* Created by bartburg on 4-11-2015. 
*/ 
public class AssetsReader { 

    public static Drawable getDrawableFromAssets(Context context, String url){ 
     Drawable drawable = null; 
     InputStream inputStream = null; 
     try { 
      inputStream = context.getAssets().open(url); 
      drawable = Drawable.createFromStream(inputStream, null); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if(inputStream != null) { 
       try { 
        inputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return drawable; 
    } 
} 
Cuestiones relacionadas