Android загружает только изображения, которые видны в horizontalScrollView

У меня есть HorizontalScrollView, который содержит LinearLayout для хранения всего моего представления. Я добавляю около 20 RelativeLayout, который содержит ImageView и TextView для LinearLayout. Я хотел бы загружать только изображения, если ImageView находится на экране (при прокрутке к ImageView).

Я попытался следовать этому сообщению, чтобы использовать getHitRect() , в миниатюре, однако Rect (bounds) для миниатюры всегда 0, 0-0, 0, в результате мой метод возвращает false. Что я делаю не так?

thumbnailLayout – это мой LinearLayout внутри HorizontalScrollView
thumbnailScroll – мой 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); } 

Редактировать Я использую TreeObserver и обнаружил, что мой метод проверки правильности отображения файлов на экране неверен. Он по-прежнему захватывает все изображения и постоянно петли (потому что я использую 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; } }); 

Вам нужен ListView, но в андроиде нет собственного HorizontallListView. Вы можете попробовать HorizontallListView от DevSmart . Он работает как просмотр собственного списка, с адаптерами и пользовательскими представлениями, если вы хотите.

Yo lo estoy utilizando en mi proyecto por la misma razón que tu, para cargar solo las imagenes visibles, так что я надеюсь, что это может вам помочь.

Вы думали об использовании ViewPager? http://developer.android.com/reference/android/support/v4/view/ViewPager.html

Если это не соответствует вашему дизайну, вам необходимо переопределить функцию ScrollView -> onScrollChanged и проверить, отображается ли ваше изображение на экране в позиции изображения (слева?) По сравнению с положением прокрутки.