Масштабирование изображения до максимальной доступной ширины, сохранение соотношения сторон и исключение дополнительного пространства ImageView - PullRequest
17 голосов
/ 03 января 2012

У меня есть этот простой XML-макет и файл green_square.png размером 30X30 пикселей

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:background="@color/red"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:adjustViewBounds="true"
        android:scaleType="fitStart"
        android:src="@drawable/green_square"/>

</LinearLayout>

То, чего я пытаюсь добиться, - это масштабировать изображение, чтобы заполнить родительскую ширину, сохраняя его пропорции без дополнительного пространства ImageView.

Я добавил красный фон в ImageView только для справки о дополнительном пространстве, которое я хочу избежать.

Вот моя цель

Ответы [ 5 ]

38 голосов
/ 24 марта 2013
<ImageView
        android:id="@+id/game"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:adjustViewBounds="true"
        android:src="@drawable/ic_game" 
        />

это работает для меня. Полная ширина родительской и центральной обрезки для сохранения соотношения сторон

0 голосов
/ 06 октября 2016

Это так просто. Просто сделайте ширину fill_parent и высоту wrap_content. Вот это я разобрался.

<ImageView
    android:id="@+id/game"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"
    android:src="@drawable/ic_game" 
    />
0 голосов
/ 03 января 2012

Попробуйте это,

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/red"
    android:scaleType="centerCrop"
    android:src="@drawable/green_square" />

</LinearLayout>
0 голосов
/ 03 мая 2012

На мой взгляд, этот ImageView дополнительный макет является ошибкой. У меня случилось то же самое. В результате текст, за которым я хотел следовать green_square, следовал за дополнительным макетом. Так что я сделал, чтобы указать текст относительно нижней части экрана. Таким образом, текст будет проходить через дополнительный макет. Признаюсь, это было не лучшее решение, но оно выглядит намного лучше, чем наличие огромного пространства между green_square и текстом.

0 голосов
/ 03 января 2012

Используйте тип шкалы «fitCenter» или «fitxy»

...