J'essaie de charger une image à partir du dossier asset
, puis de la définir sur ImageView
. Je sais que c'est beaucoup mieux si j'utilise le R.id.*
pour cela, mais le principe est que je ne connais pas l'id de l'image. En gros, j'essaie de charger dynamiquement l'image via son nom de fichier.
Par exemple, je récupère au hasard un élément de la database
représentant une 'vache', ce que mon application ferait maintenant: afficher une image d'une 'vache' via la ImageView
. Ceci est également vrai pour tous les éléments de la database
. (L'hypothèse est, pour chaque élément, il y a une image équivalente)
merci d'avance.
MODIFIER
oublié la question, comment puis-je charger l'image à partir du dossier asset
?
Si vous connaissez le nom du fichier dans le code, appeler ce ne sera pas un problème:
ImageView iw= (ImageView)findViewById(R.id.imageView1);
int resID = getResources().getIdentifier(drawableName, "drawable", getPackageName());
iw.setImageResource(resID);
Votre nom de fichier sera le même nom que drawableName afin que vous n'ayez pas à traiter avec des actifs.
Commander ce code . Dans ce tutoriel, vous trouverez comment charger une image à partir d'un dossier de ressources.
// charger l'image
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;
}
Vous voilà,
public Bitmap getBitmapFromAssets(String fileName) {
AssetManager assetManager = getAssets();
InputStream istr = assetManager.open(fileName);
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
Certaines de ces réponses peuvent répondre à la question mais je n’ai jamais aimé aucune d’elles et j’ai fini par écrire ceci, c’est pour aider la communauté.
Obtenez Bitmap
de l'actif:
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;
}
Obtenez Drawable
de l'actif:
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;
}
WebView web = (WebView) findViewById(R.id.webView);
web.loadUrl("file:///Android_asset/pract_recommend_section1_pic2.png");
web.getSettings().setBuiltInZoomControls(true);
Cela a fonctionné dans mon cas d'utilisation:
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
}
(voir aussi https://javarevisited.blogspot.com/2014/10/right-way-to-close-inputstream-file-resource-in-Java.html )
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;
}