Подтвердить что ты не робот

Масштабировать изображения в андроиде относительно ширины экрана

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

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

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

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

4b9b3361

Ответ 1

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

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

<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() в пользовательском представлении и использовать методы рисования холста.

Ответ 2

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