Загрузка изображения из папки с данными
Я пытаюсь загрузить изображение из папки asset
, а затем установить его в ImageView
. Я знаю это намного лучше, если я использую R.id.*
для этого, но предпосылка - я не знаю идентификатора изображения. В принципе, я пытаюсь динамически загружать изображение через его имя.
Например, я случайным образом извлекаю элемент в database
, представляющий, скажем, "корову", теперь мое приложение будет отображать изображение "коровы" с помощью ImageView
. Это также верно для всех элементов в database
. (Предполагается, что для каждого элемента существует эквивалентный образ)
заблаговременно.
ИЗМЕНИТЬ
забыли вопрос, как загрузить изображение из папки asset
?
Ответы
Ответ 1
Если вы знаете имя файла в коде, вызов этого не будет проблемой:
ImageView iw= (ImageView)findViewById(R.id.imageView1);
int resID = getResources().getIdentifier(drawableName, "drawable", getPackageName());
iw.setImageResource(resID);
Ваше имя файла будет иметь то же имя, что и drawableName, поэтому вам не придется иметь дело с активами.
Ответ 2
Ознакомьтесь с этим code. В этом уроке вы можете найти, как загрузить изображение из папки с ресурсами.
//загрузить изображение
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;
}
Ответ 3
Здесь вы,
public Bitmap getBitmapFromAssets(String fileName) {
AssetManager assetManager = getAssets();
InputStream istr = assetManager.open(fileName);
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
Ответ 4
Некоторые из этих ответов могут ответить на вопрос, но я никогда не любил никого из них, поэтому я написал это, это моя помощь сообществу.
Получить Bitmap
из активов:
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;
}
Получить Drawable
из активов:
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;
}
Ответ 5
WebView web = (WebView) findViewById(R.id.webView);
web.loadUrl("file:///android_asset/pract_recommend_section1_pic2.png");
web.getSettings().setBuiltInZoomControls(true);
Ответ 6
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;
}
Ответ 7
Согласно документации разработчика Android загрузка с растровым изображением может ухудшить производительность приложения. Вот ссылка ! Так что док предлагает использовать библиотеку Glide.
Если вы хотите загрузить изображение из папки ресурсов, то с помощью библиотеки Glide вам будет легче.
просто добавьте зависимости в build.gradle (Модуль: приложение) с https://github.com/bumptech/glide
dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
пример примера:
// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
...
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("file:///android_asset/img/fruit/cherries.jpg").into(imageView);
}
В случае, если вышеописанный метод не работает: замените этот объект на представленный ниже код вида объекта (только если у вас есть метод Inflate, примененный как показано ниже в вашем коде).
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.book,parent,false);
Ответ 8
Это сработало в моем случае использования:
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
}