0

Приветствуем вас всех.ImageView CENTER_CROP dont work

У меня есть LinearLayout, который должен показывать ImageView. ImageView должен соответствовать всей ширине LinearLayout, поэтому я использовал match_parent для ширины, и он должен поддерживать соотношение сторон, поэтому я использовал wrap_content для высоты и setAdjustViewBounds для true. Но что-то не работает, потому что ширина ImageView правильная (она соответствует ширине линейного макета), но высота изображенияView неправильная (изображение обрезается в верхней и нижней частях)

Я пробовал со всеми типами шкалы (fit_center, fit_xy, center_crop, center_inside и т. Д.), И у меня проблемы со всеми из них (например, если я использую fit_center, изображение не соответствует полной ширине ImageView , я могу увидеть два черных пространства слева и справа от изображения, также я попытался с помощью FIT_CENTER без setAdjustViewBounds и у меня такая же проблема)

ЗДЕСЬ ВЫ иМЕЕТЕ SNAPSHOT: http://i.stack.imgur.com/8hrKF.png

это мой код:

LinearLayout onlineHolder = this.holders.get(i); 
onlineHolder.setLayoutParams(
    new LinearLayout.LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
onlineHolder.removeAllViews(); 
ImageView imgv = new ImageView(onlineHolder.getContext()); 
imgv.setLayoutParams(
    new LinearLayout.LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
imgv.setAdjustViewBounds(true); 
imgv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
Bitmap b=res.getCachedBitmapWithWidth(this.width); //obtenemos el recurso cacheado con el width correspondiente 
imageElement.setBitmap(b); 
imgv.setImageBitmap(b); 
onlineHolder.addView(imgv); 

Благодаря

EDIT: он работает только тогда, когда я указать ширину и высоту ImageView с абсолютными числами. Например, если я ставлю 400 (400 - это 50% экрана, ширина макета) и высота 583, это работает, но если я поместил MATCH_PARENT для ширины и WRAP CONTENT для высоты ... он не работает ... Зачем?

+0

, что происходит, если вы держать onlineHolder PARAMS быть wrap_content и wrap_content при сохранении Params макета imgv быть match_parent и match_parent? другие вещи остаются прежними. – droidx

+0

изображение отображается выравниванием влево и с огромным черным пространством справа – NullPointerException

+0

Я немного скептически отношусь к setImageBitmap! setImageResource работал для меня. Автоматическое масштабирование – droidx

ответ

1

У меня есть это в XML, и он работает так, как вы хотите. взглянуть.

<ImageView 
    android:id="@+id/attachedImage" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop" 
    android:adjustViewBounds="true" /> 

Но если вы хотите сделать это на время выполнения, я предлагаю создать XML-так и завышать вид на RUNTIME и добавить его в свой родительский макет. Это будет работать точно.

EDIT: Как раздуть изображение.

LayoutInflater inflater = getLayoutInflater(); 
View view = inflater.inflate(R.layout.your_layout_contains_image_view, null, false); 
ImageView imageView = view.findViewById(R.id.attachedImage); 
+0

Я попробовал его во время выполнения, не работает. Мне нужно сделать это с помощью java-кода. Он работает только в том случае, если я определяю ширину и высоту изображения с абсолютными числами. Например, если я устанавливаю 400 ширины и 583 высоты, это работает, но если я поместил MATCH_PARENT для ширины и WRAP CONTENT для высоты ... это не работает ... почему? – NullPointerException

+0

Я проверил загруженный ScreenShot, и кажется, что вам нужно сделать height match_parent вместо ширины ImageView. Попробуйте и дайте мне знать. – osayilgan

+0

Кстати, значение runTime - это имя с Java. Вы также пытаетесь сделать это во время выполнения.Но то, что я говорю, вместо создания нового ImageView, раздувает этот ImageView из XML-ресурсов. – osayilgan