我正在开发一个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
}
答案 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构造函数。