【问题标题】:Is it possible to load a drawable from the assets folder?是否可以从资产文件夹中加载可绘制对象?
【发布时间】:2011-06-20 13:41:46
【问题描述】:

你能从assets(不是drawable文件夹)文件夹中的子目录加载drawable吗?

【问题讨论】:

    标签: android drawable assets


    【解决方案1】:

    希望得到帮助:

    Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null);
    

    【讨论】:

    • 只是想知道,文件是否为您自动关闭?为了安全起见,我目前给一个变量 open() 的返回值,然后手动关闭它。
    • @DatVM 不,它不会自动关闭输入流。我创建了一个具有静态方法的类来从资产中获取可绘制对象,并将其添加为下面的单独答案。
    • @СергейГрушин 对于矢量可绘制请使用 VectorDrawableCompat.createFromStream(context.assets.open("Cloths/btn_no.xml"), null)
    【解决方案2】:

    我推荐使用这个

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

    感谢资源,它返回正确缩放的drawable ...

    【讨论】:

      【解决方案3】:

      这是一个使用静态方法从资源中获取可绘制对象的类。它还会关闭输入流。

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

      【讨论】:

        【解决方案4】:

        是的,您可以使用createFromStream() 方法从InputStream 创建Drawable 对象。

        【讨论】:

        • 是否也可以在可绘制文件夹中使用可绘制对象?如果可以,比如何?
        • @chiragshah 我不明白。 drawable目录中的图片由系统为你转换。
        • 我需要一种快速的方法来从资产文件夹中加载图像,因为我有很多名称相同但目录不同的地图图块。
        • @Octavien:看到这个问题。:stackoverflow.com/questions/4885469/…
        【解决方案5】:

        这是为您执行此操作的函数。

        检查返回的 Drawable 变量是否为 null,如果路径无效或存在 IOException,则可能返回 null。

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

        【讨论】:

          【解决方案6】:

          这有助于获得正确的密度

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

          【讨论】:

            【解决方案7】:

            我在 RecyclerView 适配器中工作,发现 David 的 答案对我不起作用,(出于某种原因,asset.open 无论我导入什么内容都未解决)

            所以我发现这对我有用(Kotlin 代码)

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

            这是我的目录,您可以看到资产从资产文件夹开始,这里是 link 说明如何创建资产文件夹

            【讨论】:

              【解决方案8】:

              在这个版本你不能,如果你在你的drawable文件夹中创建一个子文件夹你不能在你的xml文件中使用它,当你使用android:src时它不会被识别。

              看看这个帖子:Can the Android drawable directory contain subdirectories?

              【讨论】:

              • 既然如此,加载数百个自定义地图图块以显示在屏幕上的最简单方法是什么?
              • 啊,我的问题是关于 assets 文件夹,而不是 drawable。问题已编辑。
              • 由于问题已更新,此答案已过时。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-12-14
              • 2012-02-20
              • 1970-01-01
              • 2014-09-29
              • 1970-01-01
              • 1970-01-01
              • 2022-01-21
              相关资源
              最近更新 更多