如何从Drawable获取URI

5
我正在开发一款Android应用程序,其中我提供了一些内置图像,并让用户选择从网络下载更多图像来使用。在我的应用程序的某个点上,我查看布局中的ImageView并希望确定其中的Drawable是内置资源还是我从Web下载到SD卡中的图像。
有没有办法提取ImageView中使用的Drawable的URI?这样我就可以看到它是资源还是已下载文件。
以下是我的代码:
ImageView view = (ImageView) layout.findViewById(R.id.content_img);
Drawable image = view.getDrawable();

更新: 根据Barry Fruitman的建议,我直接在自定义的ImageView中存储了图像的URI以供后续使用。以下是我的实现:

public class MemoryImageView extends ImageView {
private String storedUri = null;

public MemoryImageView(Context context, String Uri) {
    super(context);
}

public MemoryImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MemoryImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public String getStoredUri() {
    return storedUri;
}

public void setStoredUri(String storedUri) {
    this.storedUri = storedUri;
}

使用方法如下:

}

MemoryImageView view = (MemoryImageView) layout.findViewById(R.id.content_img);
String img = view.getStoredUri();
if(img.startsWith("android.resource")) {
    //in-built resource
} else {
    //downloaded image
}
1个回答

3
不行。一旦创建Drawable,信息就会丢失。我的建议是子类化ImageView并添加额外的成员变量来跟踪你想要的任何内容。
替换为:
<ImageView />

使用

<com.mypackage.MyImageView />

创建:

class MyImageView extends ImageView {
    protected final int LOCAL_IMAGE = 1;
    protected final int REMOTE_IMAGE = 2;
    protected int imageType;
}

MyImageView将与ImageView完全相同,但具有您可以随时读写的额外成员。您可能还需要使用调用super()的构造函数覆盖ImageView构造函数。


有趣的解决方案,为什么需要LOCAL_IMAGE和REMOVE_IMAGE常量? - Stefan Anca
我只是举了一些常量值的例子,你可以将它们分配给imageType。你可以使用任何你想要的值(甚至是字符串或其他数据类型)。 (REMOVE_IMAGE应该是REMOTE_IMAGE。我刚刚编辑了帖子来修复这个问题)。 - Barry Fruitman
谢谢,实际上我需要URI不仅是为了那个目的,还要将其存储在数据库中,所以我只是将它作为字符串保留在我的视图中。 - Stefan Anca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接