Android sólo descarga imágenes que son visibles en horizontalScrollView

Tengo un HorizontalScrollView que contiene un LinearLayout para sostener toda mi visión. Agrego aproximadamente 20 RelativeLayout que contiene un ImageView y TextView al LinearLayout. Me gustaría cargar imágenes sólo si el ImageView está en la pantalla (cuando me desplazo a ImageView).

Intenté seguir esta publicación para usar getHitRect() , en la miniatura, sin embargo, el Rect (límites) para la miniatura siempre es 0, 0-0, 0, resultando en mi método para devolver false. ¿Qué estoy haciendo mal?

ThumbnailLayout es mi LinearLayout dentro de la HorizontalScrollView
thumbnailScroll es mi HorizontalScrollView

 runOnUiThread(new Runnable() { @Override public void run() { Log.e(TAG, "running"); for (int i = 0; i < thumbnailLayout.getChildCount(); i++) { RelativeLayout view = (RelativeLayout) thumbnailLayout.getChildAt(i); ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail); if (thumbnailIsOnScreen(thumbnail)) { Log.e(TAG, items.get(i).getTitle() + " has downloaded"); app.setImage(items.get(i).getThumbnailSmall(), thumbnail); } } } }); private boolean thumbnailIsOnScreen(ImageView thumbnail) { Rect bounds = new Rect(); thumbnail.getHitRect(bounds); Rect scrollBounds = new Rect(thumbnailScroll.getScrollX(), thumbnailScroll.getScrollY(), thumbnailScroll.getScrollX() + thumbnailScroll.getWidth(), thumbnailScroll.getScrollY() + thumbnailScroll.getHeight()); return Rect.intersects(scrollBounds, bounds); } 

Editar Estoy tred usando TreeObserver y encontré que mi método para comprobar si las miniaturas están en la pantalla está mal. Todavía agarra todas las imágenes, y constantemente bucles (porque estoy usando onPreDrawListener?)

 thumbnailLayout.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { @Override public boolean onPreDraw() { Log.e(TAG, "running"); for (int i = 0; i < thumbnailLayout.getChildCount(); i++) { RelativeLayout view = (RelativeLayout) thumbnailLayout.getChildAt(i); ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail); if (thumbnailIsOnScreen(thumbnail)) { Log.e(TAG, items.get(i).getTitle() + " has downloaded"); app.setImage(items.get(i).getThumbnailSmall(), thumbnail); } } return true; } }); 

Necesita un ListView pero no hay HorizontallListView nativo en android. Puede intentar HorizontallListView por DevSmart . Funciona como una vista de lista nativa, con adaptadores y vistas personalizadas si lo desea.

Yo lo estoy usando en mi proyecto por la misma razón que tu, por lo que espero que esto pueda ayudarte.

¿Ha pensado en usar ViewPager? http://developer.android.com/reference/android/support/v4/view/ViewPager.html

Si eso no se ajusta a su diseño, necesita reemplazar la función ScrollView -> onScrollChanged y comprobar si su imagen en la pantalla comprueba la posición de la imagen (izquierda?) En comparación con la posición de desplazamiento.

  • Android: WebView mejora la velocidad de carga de los archivos html locales
  • Vista de lista dinámica - Patrón de diseño
  • Eficiencia de getDrawable (): ¿es el Drawable almacenado en caché por el framework?
  • GridView carga lento para los recursos de imagen grande
  • Miles de insertos crudos de ORMLite que tardan varios minutos en Android
  • StackOverflowError al cambiar la visibilidad de la vista
  • ¿Cómo ahorrar una matriz larga como números hexadecimales inversos más rápido?
  • Dispositivos Android que no tienen JIT
  • Está llamando libgdx SpriteBatch método de inicio y fin varias veces caro?
  • ¿Tiene Android (en ARM) los contadores de rendimiento de hardware?
  • ¿Por qué Android prefiere las clases estáticas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.