Cómo obtener URI de Drawable
Estoy trabajando en una aplicación de Android en la que entregar algunas imágenes incorporadas y dar al usuario la opción de descargar un poco más de la web para utilizar en la aplicación. En algún punto de mi aplicación, miro un ImageView en mi diseño y quiero determinar si el interior Drawable es un recurso incorporado o una imagen que he descargado de la web a la tarjeta SD.
¿Hay alguna manera de extraer el URI del Drawable utilizado en el ImageView? De esta manera sería capaz de ver si es un recurso o un archivo descargado.
Aquí está mi código hasta ahora:
ImageView view = (ImageView) layout.findViewById(R.id.content_img); Drawable image = view.getDrawable();
ACTUALIZACIÓN: Utilizando la sugerencia de Barry Fruitman de abajo, almacené el URI de la imagen directamente dentro de mi ImageView personalizado para uso posterior. Así es como se ve mi implementación:
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; }
}
Y el uso se parece a esto:
MemoryImageView view = (MemoryImageView) layout.findViewById(R.id.content_img); String img = view.getStoredUri(); if(img.startsWith("android.resource")) { //in-built resource } else { //downloaded image }
No. Una vez que cree el Drawable, esa información se pierde. Lo que sugiero que hagas es subclase el ImageView y agrega miembros adicionales para realizar un seguimiento de lo que quieras.
Reemplazar:
<ImageView />
con
<com.mypackage.MyImageView />
Y crear:
class MyImageView extends ImageView { protected final int LOCAL_IMAGE = 1; protected final int REMOTE_IMAGE = 2; protected int imageType; }
MyImageView se comportará exactamente como un ImageView, pero con ese miembro adicional que puede leer y escribir en cualquier lugar que desee. Probablemente también tendrá que reemplazar el constructor ImageView con constructores que simplemente llaman super ().