【问题标题】:Android get image path from drawable as stringAndroid从可绘制的字符串中获取图像路径
【发布时间】:2011-12-22 08:18:03
【问题描述】:

有什么方法可以从 android 中的可绘制文件夹中获取图像路径作为字符串。我需要这个,因为我实现了自己的视图流,在其中我通过使用它们在 sd 卡上的路径来显示图像,但是当没有要显示的图像时,我想显示默认图像。

有什么想法吗?

【问题讨论】:

标签: android drawable


【解决方案1】:

这些都是方法:

String imageUri = "drawable://" + R.drawable.image;

我测试的其他方式

Uri path = Uri.parse("android.resource://com.segf4ult.test/" + R.drawable.icon);
Uri otherPath = Uri.parse("android.resource://com.segf4ult.test/drawable/icon");

String path = path.toString();
String path = otherPath .toString();

【讨论】:

  • 我收到所有文件格式不支持的错误。
  • 这样的模式返回 FileNotFound Exception
【解决方案2】:

根据上面的一些回复,我即兴创作了一点

创建此方法并通过传递您的资源调用它

可重用方法

public String getURLForResource (int resourceId) {
    //use BuildConfig.APPLICATION_ID instead of R.class.getPackage().getName() if both are not same
    return Uri.parse("android.resource://"+R.class.getPackage().getName()+"/" +resourceId).toString();
}

示例调用

getURLForResource(R.drawable.personIcon)

完整的图片加载示例

String imageUrl = getURLForResource(R.drawable.personIcon);
// Load image
 Glide.with(patientProfileImageView.getContext())
          .load(imageUrl)
          .into(patientProfileImageView);

您可以将函数 getURLForResource 移动到 Util 文件中并使其 静态 以便可以重复使用

【讨论】:

  • 唯一适合我的答案。这个组合的 URL 与来自不同提供商的 Android 风格的兼容性如何?
  • @AshishJain,你需要分享更多信息,比如安卓版本;图像类型是什么,图像放置位置错误(如果有)等等。
  • 我正在为 Android 所有版本(如 8,9 和 10)尝试相同的代码并传递矢量图像 (.xml),但它没有显示在我的自定义 recyclerview 上。
  • @AshishJain 上面的代码已经过测试与常规图像的兼容性,但不兼容 SVG
  • 您应该使用 BuildConfig.APPLICATION_ID 而不是 R.class.getPackage().getName() 导致有些人将包命名为与应用 ID 不同
【解决方案3】:

如果您打算从其路径中获取图像,最好使用资产而不是试图找出可绘制文件夹的路径。

    InputStream stream = getAssets().open("image.png");
    Drawable d = Drawable.createFromStream(stream, null);

【讨论】:

    【解决方案4】:

    我认为您无法以String 的形式获取它,但您可以通过获取资源idint 的形式获取它:

    int resId = this.getResources().getIdentifier("imageNameHere", "drawable", this.getPackageName());
    

    【讨论】:

      【解决方案5】:

      首先检查文件是否存在于 SDCard 中。如果 SD 卡中不存在该文件,则可以使用 setImageResource() 方法设置图像并从可绘制文件夹中传递默认图像

      示例代码

      File imageFile = new File(absolutepathOfImage);//absolutepathOfImage is absolute path of image including its name
              if(!imageFile.exists()){//file doesnot exist in SDCard
      
              imageview.setImageResource(R.drawable.defaultImage);//set default image from drawable folder
              }
      

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 2018-03-31
        • 2012-03-05
        相关资源
        最近更新 更多