Est-il possible de charger un drawable à partir du dossier assets?
pouvez-vous charger un drawable à partir d'un sous-répertoire dans le dossier assets
(pas le dossier drawable)?
7 réponses
Espérons que cela aide:
Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null);
je recommande d'utiliser ce
Drawable.createFromResourceStream(resources,new TypedValue(), resources.getAssets().open(filename), null)
qui retourne correctement dimensionné tirable grâce à des ressources ...
Voici une classe avec méthode statique pour obtenir le drawable à partir des actifs. Il ferme également l'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;
}
}
Oui, vous pouvez créer un Drawable
objet à partir d'un InputStream
à l'aide de la createFromStream() la méthode.
Voici une fonction qui fait cela pour vous.
cochez la variable Drawable retournée pour null as null peut revenir si le chemin est invalide ou s'il y a une 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;
}
cela a aidé à obtenir la bonne densité
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;
}
À cette version vous ne pouvez pas, si vous créez un sous-dossier du dossier drawable vous ne pouvez pas l'utiliser dans votre fichier xml, il ne sera pas reconnu lorsque vous utilisez android:src.
jetez un oeil à ce fil: le répertoire dessinable Android peut-il contenir des sous-répertoires?