Как установить фоновое изображение из папки ресурса в 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);