visor y carga asíncrona
Frecuentes
Visto 1,578 equipos
0
Configuré un visor en mi proyecto que desplaza las imágenes. Estoy alimentando las imágenes del visor desde un fragmento administrado por un adaptador. Las imágenes están almacenadas, provienen de una de mis carpetas dibujables o provienen de una URL. He estado usando Volley de Android junto con un caché de memoria para adquirir las imágenes de la red (URL). Mi código para completar el fragmento es el siguiente:
// case for no xml url's downloaded
if (url == null) {
ImageView image = new ImageView(getSherlockActivity());
image.setImageResource(imageResourceId);
image.setScaleType(ScaleType.FIT_XY);
layout.addView(image);
} else {
// use volley NetworkImageView
NetworkImageView image = new NetworkImageView(getSherlockActivity());
image.setImageUrl(url, ImageCacheManager.getInstance().getImageLoader());
image.setScaleType(ScaleType.FIT_XY);
layout.addView(image);
}
Descubrí que el desplazamiento de la imagen es lento en cualquier caso y sospecho que el problema es cargar en la cola principal. ¿Debería usar el "Universal Image Loader" en lugar de Volley? He visto el divertido ejemplo de mapa de bits de Android, pero me preocupa la complejidad y su capacidad para manejar URL y dibujables.
Gracias de antemano por su ayuda.
1 Respuestas
1
@Override
public Object instantiateItem( View pager, final int position )
{
//Some other work related to instantiation of item
AsyncTask<Uri, Void, Bitmap> mLoadTask = new AsyncTask<Uri, Void, Bitmap>() {
//async task for loading images in background
@Override
protected void onPostExecute(Bitmap result) {
pageview[position].setImageBitmap(result);
//post in ui thread
//this way you have a reference object for each item(using position)
//and hence you can start several tasks at the same time
}
@Override
protected Bitmap doInBackground(Uri... params) {
Bitmap bitmap=getBitmap(params[0]);
//here getBitmap returns the bitmap using uri arguement
return bitmap;
}
};
mLoadTask.execute(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + image_id));
}
Esto creará un nuevo hilo para cada View
por lo tanto, el subproceso principal de la interfaz de usuario se ejecutará sin problemas.
Respondido 16 Feb 14, 18:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android-viewpager android-imageview android-volley or haz tu propia pregunta.
Gracias por la respuesta. Su respuesta asume que las imágenes están almacenadas en el almacén de medios del proveedor de contenido de Android. En mi caso, tengo direcciones URL que se utilizan para extraer las imágenes de un servidor. Además, existe la posibilidad de que la vista ya haya desaparecido cuando onPostExecute se ejecuta a medida que el buscapersonas de la vista recorre las vistas. Supongo que la mejor manera es una caché de memoria/disco. - Jack120
@ Jack120 Esta es solo una demostración de la implementación de tareas asíncronas. Estoy seguro de que puede hacer las modificaciones necesarias para hacerlo para cualquier propósito que desee. En segundo lugar, el
pageview[position]
asegura que una referencia única está disponible duranteonPostExecute
usando elposition
variable. Entonces, incluso si se sale del alcance, no se encuentra con ningún problema. - ShaktiEntiendo. Pero todavía necesito obtener el mapa de bits en la memoria caché para futuras cargas. - Jack120
github.com/thest1/LazyList Esto se encargará de todas sus necesidades, carga diferida, almacenamiento en caché en la tarjeta SD y en la memoria. También usa inSampleSize para reducir la memoria utilizada. - Shakti