Делаем сетку, заполненную Glide, более структурированной

Я задал этот вопрос на здесь, я пытался загрузить широкий и длинный изображения с Glide в GridView, и хотел загружать эти изображения разного размера более равномерно, как это делает Пикассо, сохраняя при этом соотношение сторон в максимально возможной степени. Ответ, который я получил, заключался в том, что это давняя проблема с GridViews и попытка просмотра изображения с соотношением сторон Джейка Уортона, которое я пробовал без какого-либо успеха. Другое предложение состояло в том, чтобы сделать RecyclerView в шахматном порядке, отличный ответ, но много изменений

Причиной всего этого было то, что мои изображения были слишком большими для быстрой загрузки Picasso, и пользователи жаловались, что это было очень медленно, но Glide (который кажется намного быстрее) загружает изображения с таким соотношением сторон и портит однородность моей сетки. , вы можете видеть по ссылке: длинные изображения занимают столько же места, сколько 2 широких изображения. В любом случае, после множества проб и ошибок я теперь использую Glide следующим образом:

int width = getActivity().getWindowManager().getDefaultDisplay().getWidth();
int myWidth = width / 2;

Glide.with(getActivity())
     .load(mThumbIds[position])
     .placeholder(R.drawable.placeholder)
     .override(myWidth, myWidth)
     .centerCrop()
     .into(imageView)
;

Я новичок в Android, но это, кажется, работает отлично. И мой вопрос теперь отличается от того, что getWidth устарело (приложение предназначено для API 16+), что-то не так с этим (получение ширины экрана, разделяющей его, и передача его вызову изменения размера Glide)? Я думаю, что нужно подождать, чтобы измерить вид, но это все равно быстрее, чем у Пикассо. Кто-нибудь может предложить что-нибудь лучше?


person Martin Seal    schedule 19.08.2015    source источник
comment
В этом случае Glide не ждет макета, потому что вы используете .override(), который будет размером результирующего растрового изображения.   -  person TWiStErRob    schedule 01.10.2015
comment
вам нужно использовать display.getSize(size);   -  person karan    schedule 01.10.2015


Ответы (2)


для API меньше, чем соты, вы можете использовать свой подход, но для API выше вам нужно использовать метод getSize(). Я использую приведенный ниже код для этого

    if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR2) {
         Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
    } else {
        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
    }
person karan    schedule 01.10.2015

Вы можете использовать getDisplayMetrics()

getActivity().getResources().getDisplayMetrics().widthPixels;
person Kaushik    schedule 01.10.2015