如何从Drawable获取URI

时间:2012-01-22 00:23:47

标签: android drawable

我正在开发一个Android应用程序,我在其中提供一些内置图像,并允许用户从Web下载更多内容以在应用程序中使用。在我的应用程序中的某个时刻,我在我的布局中查看了一个ImageView,并想确定Drawable内部是内置资源还是我从Web下载到SD卡的图像。

有没有办法提取ImageView中使用的Drawable的URI?通过这种方式,我可以看到它是资源还是下载文件。

到目前为止,这是我的代码:

ImageView view = (ImageView) layout.findViewById(R.id.content_img);
Drawable image = view.getDrawable();

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

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 个答案:

答案 0 :(得分: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构造函数。