Как установить фоновое изображение из папки ресурса в Android?
Я столкнулся с проблемой при установке обратного изображения LinearLayout из папки с ресурсами.
String filePath="file:///android_asset/images/test.png";
Drawable d = Drawable.createFromPath(filePath);
frontTextView.setBackgroundDrawable(d);
Может кто-нибудь помочь мне.
Ответы
Ответ 1
Хорошо, если кто-то еще споткнется здесь, с этой самой проблемой, где вы хотите установить фон представления из образа, который находится в активах:
Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null);
а затем установите его в некоторый вид, который поддерживает только Drawables в качестве фона.
Ответ 2
Насколько мне известно, вы не можете напрямую обращаться к активам, как вы пытаетесь. Вам нужно будет использовать класс AssetManager для получения ваших данных, если вы хотите сохранить его в качестве актива. Здесь довольно приличный пост в блоге, объясняющий немного о ресурсах и активах, хотя официальная документация также является хорошим ресурсом, конечно.
Я также добавлю, что такие вещи, как фоновые изображения, как правило, лучше всего хранятся в res/drawable
и доступны по типу R.drawable.*
(ссылка на сообщение выше, также обсуждает это), когда это возможно. Не совсем понятно, почему вам нужно сделать это таким образом из вашего предоставленного кода, однако, я полагаю, что в конечном итоге ваш вызов.
Ответ 3
EDIT: добавлено создание изображения из InputStream...
У меня была аналогичная проблема с использованием ImageButton. Я понял это, загрузив растровое изображение из активов и используя его в качестве изображения для ImageButton. Наверное, это не очень хороший подход, но он работает и решает мою проблему - неспособность иметь подпапки в рисоваемом каталоге и не допускать символов в именах файлов.
(Да, я могу использовать префикс вместо subdir и переименовывать файлы в соответствии с шаблоном (только строчные буквы и цифры), и я, вероятно, сделаю это позже.)
InputStream is = null;
try {
is = this.getResources().getAssets().open("Images/Fruits/Apple.png");
} catch (IOException e) {
Log.w("EL", e);
}
Bitmap image = BitmapFactory.decodeStream(is);
ImageButton ib2 = (ImageButton) findViewById( R.id.imageButton2);
ib2.setImageBitmap( image);