Отображение большого количества фотографий из галереи в виде сетки
Я создал пример кода для загрузки всех изображений из галереи и отображения их в GridView.
Я использую библиотеку с открытым исходным кодом Picasso для отображения изображений.
GridView
прокрутка очень медленная, у меня есть более 1000 изображений, которые я хочу показать одновременно.
Вот мой код для получения изображений, который является основным курсором.
paths = new ArrayList<String>();
cursor = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (cursor != null) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
paths.add(cursor.getString(1));
}
}
И следующий код getview()
реализация в BaseAdpter
где я показываю изображения.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SquaredImageView iv = (SquaredImageView) convertView;
if (iv == null) {
iv = new SquaredImageView(inflater.getContext());
}
String url = data.get(position);
Picasso.with(inflater.getContext()).load(new File(url)).into(iv);
return iv;
}
/** An image view which always remains square with respect to its width. */
final public class SquaredImageView extends ImageView {
public SquaredImageView(Context context) {
super(context);
}
public SquaredImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
}
1 ответ
Вы должны просто отобразить фотографии, которые в данный момент видны на экране, а также, возможно, предварительно загрузить фотографии чуть выше и ниже них. Когда они уходят за пределы экрана, вы должны избавиться от них, чтобы очистить память.
использование gridView.setOnScrollListener
слушать для прокрутки. В событии onScroll() используйте параметры firstVisibleItem
а также visibleItemCount
рассчитать, какие виды показать и скрыть.