Размер Android ImageView не масштабируется с исходным изображением

У меня есть несколько ImageView внутри LinearLayout. Мне нужно уменьшить ImageView, чтобы они сохранили свои пропорции, при этом помещаясь в LinearLayout по вертикали. По горизонтали, мне просто нужно, чтобы они были рядом друг с другом.

Я сделал упрощенный тестовый стенд для этого, который размещает взвешенные макеты, так что у меня есть широкий, но не очень высокий LinearLayout для ImageViews -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
        <LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
            <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
            <ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
        </LinearLayout>
        <LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
    </LinearLayout>
    <LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>

(В редакторе макетов Eclipse изображения обрезаны по вертикали и совсем не масштабируются, но это ' это лишь одна из тех идиосинкразий, которые мы учимся любить)

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

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

] Я попытался создать класс IconView (расширяет ImageView), который переопределяет onMeasure, чтобы я мог создавать представления изображений необходимого размера, масштабируя ширину в зависимости от высоты. Но параметры parentWidth и parentHeight, передаваемые в функцию, были размерами экрана, а не контейнера LinearLayout.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
  int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
  // Calculations followed by calls to setMeasuredDimension, setLayoutParams
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

Итак, мои вопросы -

1) Могу ли я каким-то образом изменить XML, чтобы заставить его делать то, что я нужно?

2) Как мне сделать так, чтобы мой пользовательский класс получил высоту LinearLayout, чтобы я мог вычислить необходимую ширину для пользовательских изображений?

Спасибо, если вам удалось дочитать до этого места. Еще больше спасибо, если вы можете указать мне направление решения!

72
задан Rok 18 March 2011 в 16:42
поделиться