wake-up-neo.com

Laden Sie ein Bild aus dem Ordner "Assets"

Ich versuche, ein Bild aus dem Ordner asset zu laden und es auf eine ImageView zu setzen. Ich weiß, dass es viel besser ist, wenn ich den R.id.* dafür verwende, aber die Prämisse ist, dass ich die ID des Bildes nicht kenne. Grundsätzlich versuche ich, das Bild über den Dateinamen dynamisch zu laden. 

Ich rufe zum Beispiel zufällig ein Element in der Variable database ab, sagen wir eine 'cow'. Nun würde meine Anwendung nun ein Bild einer 'cow' über die ImageView anzeigen. Dies gilt auch für alle Elemente in der database. (Die Annahme ist, für jedes Element gibt es ein äquivalentes Bild)

danke im Voraus.

EDIT

habe die Frage vergessen, wie ich das Bild aus dem Ordner asset lade?

51
kishidp

Wenn Sie den Dateinamen im Code kennen, ist das Aufrufen kein Problem:

ImageView iw= (ImageView)findViewById(R.id.imageView1);  
int resID = getResources().getIdentifier(drawableName, "drawable",  getPackageName());
iw.setImageResource(resID);

Ihr Dateiname hat denselben Namen wie drawableName, so dass Sie sich nicht mit Assets beschäftigen müssen.

30
Erol

Überprüfen Sie diesen Code . In diesem Tutorial erfahren Sie, wie Sie ein Bild aus dem Asset-Ordner laden.

// Bild laden

try 
{
    // get input stream
    InputStream ims = getAssets().open("avatar.jpg");
    // load image as Drawable
    Drawable d = Drawable.createFromStream(ims, null);
    // set image to ImageView
    mImage.setImageDrawable(d);
  ims .close();
}
catch(IOException ex) 
{
    return;
}
104
Chirag

Hier sind Sie ja,

  public Bitmap getBitmapFromAssets(String fileName) {
    AssetManager assetManager = getAssets();

    InputStream istr = assetManager.open(fileName);
    Bitmap bitmap = BitmapFactory.decodeStream(istr);

    return bitmap;
}
38
osayilgan

Einige dieser Antworten können die Frage beantworten, aber ich mochte keine von ihnen, also habe ich am Ende dieses Dokuments geschrieben, es ist meine Hilfe für die Community.

Bitmap von Assets abrufen:

public Bitmap loadBitmapFromAssets(Context context, String path)
{
    InputStream stream = null;
    try
    {
        stream = context.getAssets().open(path);
        return BitmapFactory.decodeStream(stream);
    }
    catch (Exception ignored) {} finally
    {
        try
        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}

Drawable von Assets abrufen:

public Drawable loadDrawableFromAssets(Context context, String path)
{
    InputStream stream = null;
    try
    {
        stream = context.getAssets().open(path);
        return Drawable.createFromStream(stream, null);
    }
    catch (Exception ignored) {} finally
    {
        try
        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}
6
Nicolas Tyler
WebView web = (WebView) findViewById(R.id.webView);
web.loadUrl("file:///Android_asset/pract_recommend_section1_pic2.png");
web.getSettings().setBuiltInZoomControls(true);
2
Evgeny

Dies funktionierte in meinem Anwendungsfall:

AssetManager assetManager = getAssets();
ImageView imageView = (ImageView) findViewById(R.id.imageView);
try (
        //declaration of inputStream in try-with-resources statement will automatically close inputStream
        // ==> no explicit inputStream.close() in additional block finally {...} necessary
        InputStream inputStream = assetManager.open("products/product001.jpg")
) {
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    imageView.setImageBitmap(bitmap);
} catch (IOException ex) {
    //ignored
}

(Siehe auch https://javarevisited.blogspot.com/2014/10/right-way-to-close-inputstream-file-resource-in-Java.html )

1
Yves
public static Bitmap getImageFromAssetsFile(Context mContext, String fileName) {
        Bitmap image = null;
        AssetManager am = mContext.getResources().getAssets();
        try {
            InputStream is = am.open(fileName);
            image = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
1
Anil Singhania

Laut Android Developer Documentation kann das Laden mit Bitmap die Leistung der App beeinträchtigen ein Link ! Also schlägt das Dokument vor, die Bibliothek Glide zu verwenden.

Wenn Sie ein Bild aus dem Assets-Ordner laden möchten , verwenden Sie die Bibliothekshilfe Glide Sie viel einfacher.

füge einfach Abhängigkeiten zu build.gradle (Modul: app) von https://github.com/bumptech/glide hinzu

 dependencies {
  implementation 'com.github.bumptech.glide:glide:4.9.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

beispielbeispiel:

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
  ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("file:///Android_asset/img/fruit/cherries.jpg").into(imageView);
}

Falls obige Methode nicht funktioniert: Ersetzen Sie this object durch view object from below code (nur wenn Sie die Inflate-Methode wie unten in Ihrem Code angewendet haben).

 LayoutInflater mInflater =  LayoutInflater.from(mContext);
        view  = mInflater.inflate(R.layout.book,parent,false);
1
Prakash Karkee