Масштабировать изображения в Android относительно ширины экрана - PullRequest
12 голосов
/ 29 января 2011

У меня есть макет с двумя изображениями:

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

Более конкретно : два изображения представляют собой кусочки одного и того же изображения, и поэтому некоторые детали внутри них должны совпадать.
Могу ли ясделать это в XML?

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

Ответы [ 2 ]

6 голосов
/ 24 февраля 2011

Это немного хак, но это позволит вам сделать это в xml.

Если вы знаете, например, что верхнее изображение составляет X% от размера нижнего,тогда вы можете использовать layout_weight LinearLayout для позиционирования и размера верхнего изображения в процентах от экрана:

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <ImageView android:id="@+id/left_filler" android:layout_weight="20"
        android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <ImageView android:id="@+id/top_image" android:layout_weight="50"
        android:layout_width="wrap_content" android:layout_height="wrap_content"/>
    <ImageView android:id="@+id/right_filler" android:layout_weight="30"
        android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</LinearLayout>
 ... bottom image

Приведенное выше значение будет иметь размер top_image для 50% экрана со смещением в 20% слева,Пока top_image составляет 50% от размера bottom_image, это будет иметь одинаковый масштаб.

В качестве альтернативы, «правильный» способ сделать это, вероятно, переопределить onDraw () в пользовательскомпросматривать и использовать методы рисования на холсте.

0 голосов
/ 24 февраля 2011

Вы можете использовать Canvas метод класса drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) для рисования указанного растрового изображения путем автоматического масштабирования / трансляции для заполнения прямоугольника назначения.Это может быть использовано для обоих растровых изображений с разными Rect.Rect может быть сформулирован путем деления текущей ширины и высоты макета.Чтобы программа масштабировала изображения в соответствии с устройствами, имеющими другой размер экрана.

...