Можно ли загрузить чертеж из папки активов?

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


person Jamie    schedule 03.02.2011    source источник


Ответы (8)


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

Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null);
person Rubycon    schedule 22.02.2011
comment
Просто интересно, файл автоматически закрывается для вас? В целях безопасности я в настоящее время даю переменной возврат open(), а затем закрываю ее вручную. - person Luke Vo; 26.06.2013
comment
@DatVM нет, он не закрывает входной поток автоматически. Я создал класс со статическим методом для получения рисунков из активов и добавил его как отдельный ответ ниже. - person Bart Burg; 04.11.2015
comment
@СергейГрушин для векторного рисования используйте VectorDrawableCompat.createFromStream(context.assets.open(Cloths/btn_no.xml), null) - person Arsenius; 26.03.2019

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

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

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

person David    schedule 01.05.2011

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

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;
    }
}
person Bart Burg    schedule 04.11.2015

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

person Octavian A. Damiean    schedule 03.02.2011
comment
возможно ли также рисовать в папке с возможностью рисования? если да, то как? - person chikka.anddev; 03.02.2011
comment
@chiragshah Я не понимаю. Изображения в каталоге drawable преобразуются системой за вас. - person Octavian A. Damiean; 03.02.2011
comment
Мне нужен быстрый способ загрузки изображений из папки с ресурсами, так как у меня много фрагментов карты с одинаковыми именами, но в разных каталогах. - person Jamie; 03.02.2011
comment
@Octavien: см. этот запрос.: stackoverflow. ком/вопросы/4885469/ - person chikka.anddev; 03.02.2011

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

Проверьте возвращенную переменную 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;
}
person Sam J    schedule 06.10.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;
}
person richy    schedule 07.05.2015

Я работал с адаптером RecyclerView и обнаружил, что ответ Дэвида не работает для меня (по какой-то причине asset.open оставался неразрешенным независимо от того, что я импортировал)

поэтому я обнаружил, что это работает для меня (код Kotlin)

val d = Drawable.createFromStream(context?.assets?.open("imageData/${imageName}.png"), null)

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

введите здесь описание изображения

person DarkPh03n1X    schedule 21.04.2020

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

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

person SterAllures    schedule 03.02.2011
comment
В таком случае, как проще всего загрузить пару сотен пользовательских фрагментов карты для отображения на экране? - person Jamie; 03.02.2011
comment
Ах, мой вопрос о папке активов, а не о возможности рисования. Вопрос отредактирован. - person Jamie; 03.02.2011
comment
Этот ответ устарел теперь, когда вопрос был обновлен. - person tango whiskey double; 04.05.2012