【问题标题】:How to Set Background Image from asset folder in android?如何从android中的资产文件夹设置背景图像?
【发布时间】:2011-02-02 20:18:39
【问题描述】:

我在从资产文件夹设置 LinearLayout 的背景图像时遇到问题。

String filePath="file:///android_asset/images/test.png";
    Drawable d = Drawable.createFromPath(filePath);
    frontTextView.setBackgroundDrawable(d);

谁能帮帮我。

【问题讨论】:

  • 有什么问题?应用程序崩溃了吗?顺便说一句,您为什么使用资产文件夹而不是 res/drawable 文件夹?
  • 它不显示任何内容。我不能使用 res/drawable,因为我必须动态更改 Linearlayout 的背景。
  • 真的,也许您需要资产文件夹用于其他目的,但您可以使用 res/drawable 文件夹动态更改背景:setBackgroundResource(R.id.bg1); setBackgroundResource(R.id.bg2)

标签: android


【解决方案1】:

首先,您从资产文件创建一个Drawable 对象:

Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null);

然后将其设置为一些只支持Drawables作为背景的View。

【讨论】:

  • 我喜欢你把它做成一个单衬里:)
【解决方案2】:

据我所知,you cannot access assets directly 就像您正在尝试的那样。如果要将数据存储为资产,则需要使用 AssetManager 类来获取数据。 Here's a pretty decent blog post 稍微解释一下资源和资产,当然官方文档也是一个很好的资源。

不过,我还要补充一点,背景图像之类的内容通常最好存储在 res/drawable 中,并尽可能使用 R.drawable.* 样式访问(上面链接的博客文章也讨论了这一点)。不过,从您提供的代码示例中,您还不清楚为什么需要这样做,所以我想这最终是您的决定。

【讨论】:

    【解决方案3】:

    编辑:添加了从 InputStream 创建图像...

    我在使用 ImageButton 时遇到了类似的问题。我通过从资产加载位图并将其用作 ImageButton 的图像来解决这个问题。可能不是一个好方法,但正在工作并解决了我的问题 - 无法在可绘制目录中包含子文件夹并且文件名中不允许使用字符。

    (是的,我可以使用前缀代替子目录,并重命名文件以匹配模式(仅小写和数字),我可能稍后会这样做。)

    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);
    

    【讨论】:

    • 这很好,但“图像”变量是从哪里来的?大概是你从“是”中得到的吧?
    • 您可以从输入流创建图像... Bitmap image = BitmapFactory.decodeStream(is);
    猜你喜欢
    • 2020-06-06
    • 2017-08-05
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多