2016-11-17 13 views
2

У меня есть вид списка, где я загружаю изображение с именем человека. В списке есть около 538 элементов. Я получаю изображения людей из URL-адреса. В настоящее время я делаю следующее: -Загрузка больших изображений с помощью Picasso

Picasso.with(getContext()).load(url).resize(70,70).onlyScaleDown().into(im1);

Изображение, присутствующее в URL является очень большим по размеру и загрузке некоторых изображений занимает много времени, и это съедает мою память и при загрузке. Может кто-нибудь, пожалуйста, помогите мне в загрузке изображений эффективно и быстро.

Пример изображения для одного человека, можно найти в следующем URL: -

https://theunitedstates.io/images/congress/original/D000626.jpg

ответ

4

Вы можете использовать onlyScaleDown(), чтобы изменить размер

Picasso 
    .with(context) 
    .load(imageUrl) 
    .resize(6000, 2000) 
    .onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels. 
    .into(imageViewResizeScaleDown); 

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

Picasso 
    .with(context) 
    .load(imageUrl) 
    .fit() 
    // call .centerInside() or .centerCrop() to avoid a stretched image 
    .into(imageViewFit); 

fit() is measu сопоставить размеры целевого ImageView и внутренне использовать resize(), чтобы уменьшить размер изображения до размеров ImageView. Есть две вещи, которые нужно знать о fit(). Во-первых, вызов fit() может задержать запрос изображения, поскольку Picasso нужно будет ждать, пока не будет измерен размер ImageView. Во-вторых, вы можете использовать fit() с ImageView в качестве цели (мы рассмотрим другие цели позже).

Преимущество в том, что изображение имеет наименьшее возможное разрешение, не влияя на его качество. Более низкое разрешение означает меньшее количество данных, которые должны храниться в кеше. Это может значительно уменьшить влияние изображений в области памяти вашего приложения. В общем, если вы предпочитаете меньшее влияние памяти на несколько более быстрое время загрузки, fit() - отличный инструмент.

+0

вы должны добавить '.centerInside()' ', иначе изображение будет изменено на размер, указанный вами. –