Отображение большого количества фотографий из галереи в виде сетки

Я создал пример кода для загрузки всех изображений из галереи и отображения их в 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 рассчитать, какие виды показать и скрыть.

Другие вопросы по тегам