Можно ли загрузить drawable из папки assets?

можете ли вы загрузить drawable из подкаталога в assets (не папка drawable) папка?

7 ответов


надеюсь, что это поможет:

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

Я рекомендую использовать этот

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

который возвращает правильно масштабированные drawable благодаря ресурсам ...


вот класс со статическим методом для получения drawable из активов. Он также закрывает 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;
    }
}

Да, вы можете создать Drawable объект InputStream С помощью createFromStream() метод.


вот функция, которая делает это для вас.

Проверьте возвращаемую переменную Drawable для null, поскольку null может вернуться, если путь недействителен или есть исключение 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;
}

это помогло получить нужную плотность

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;
}

в этой версии вы не можете, если вы создадите подпапку в своей папке drawable, вы не сможете использовать ее в своем xml-файле, она не будет распознана при использовании android:src.

взгляните на эту тему:может ли каталог android drawable содержать подкаталоги?