Можно ли загрузить файл в папке ресурсов? - PullRequest
46 голосов
/ 03 февраля 2011

Можете ли вы загрузить чертеж из подкаталога в папке assets (не в папке для рисования)?

Ответы [ 7 ]

105 голосов
/ 22 февраля 2011

Надеюсь, эта помощь:

Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null);
7 голосов
/ 04 ноября 2015

Вот класс со статическим методом для получения отрисовки из активов.Он также закрывает входной поток.

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;
    }
}
7 голосов
/ 01 мая 2011

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

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

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

2 голосов
/ 06 октября 2015

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

Проверьте возвращаемую переменную 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;
}
2 голосов
/ 03 февраля 2011

Да, вы можете создать Drawable объект из InputStream, используя метод createFromStream () .

0 голосов
/ 07 мая 2015

Это помогло получить правильную плотность

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;
}
0 голосов
/ 03 февраля 2011

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

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

...