4

Так что я не знаю, почему это происходит. Я использую Universal Image Loader для загрузки этих изображений. Похоже, что последняя строка пикселей растягивается по какой-то странной причине. Я хочу, чтобы изображение просто растягивалось равномерно. (Мне все равно, что это будет выглядеть странно. Изображения ниже приведены для демонстрационных целей.)ImageView не правильно растягивает изображение

Кроме того, не обращайте внимания на первое и последнее изображение. Я намеренно размыл это, потому что на нем было чье-то лицо.

Images appear like this Это, как я создал свой универсальный погрузчик Изображение:

//setup Image Loader for loading cruise line logos 
    displayImageOptions = new DisplayImageOptions.Builder() 
    .showImageOnLoading(R.drawable.ic_launcher)//show this image when image is loading 
    .showImageForEmptyUri(R.drawable.ic_launcher)//show this image incase image doesn't exist 
    .showImageOnFail(R.drawable.ic_launcher)//show this image if fetching image from URL didn't work 
    .cacheInMemory(true)//cache image in RAM 
    .cacheOnDisc(true)//cache image in device for later use 
    .considerExifParams(true) 
    .displayer(new RoundedBitmapDisplayer(5))//super subtle rounded corners on images 
    .build(); 
+0

Для просмотра изображений вы установили высоту на 120dip и используете тип scaletype как fitXY, который, вероятно, может вызвать проблему. – Sushil

+0

Я пробовал centerCrop и удалял все это вместе. Ничего не работает. Кроме того, мне нужно использовать fitXY, чтобы сделать его более интенсивным. – Sree

ответ

5

Это вызвано способом RoundedBitmapDisplayer втягивает растрового изображения.

Если вы посмотрите на источник, вы увидите, что он использует RoundedDrawable, который использует canvas.drawRoundRect() для рисования округленного прямоугольника требуемого размера Drawable, используя загруженное изображение в качестве текстуры через BitmapShader. BitmapShader не поддерживает масштабирование (только режим зажима и черепицы). Попробуйте использовать вместо этого SimpleBitmapDisplayer, который использует обычный образ ImageView.setImageBitmap() для отображения изображения.

Если вам нужны закругленные углы, вам нужно будет найти другой способ реализовать это, например, сначала масштабируя битмап до нужного размера. Другим вариантом является вызов Canvas.saveLayer() перед делегированием BitmapDrawable для масштабирования, а затем применение эффекта скругленной угловой маскировки с использованием PorterDuff.Mode.DST_IN. В любом случае вы в конечном итоге напишите немного более низкоуровневый код, но вы должны иметь возможность инкапсулировать все красиво в пользовательский BitmapDisplayer.

+0

Спасибо за ответ. Вы проверите это завтра и сообщите, работает ли он. – Sree

+0

Вы были правы, в этом была проблема. Спасибо за помощь! – Sree

+0

Можете ли вы опубликовать свои работы здесь, я столкнулся с той же проблемой. – Dimitri

Смежные вопросы