2010-11-17 5 views
4

У меня есть изображение, которое я создал в большем размере, чем то, как оно будет отображаться наиболее вероятно. Предположим, что это 200x200. Я тестирую устройство на 800x480 в ландшафтном режиме. Моя цель состоит в том, чтобы изменить размер этого изображения до 1/4 высоты текущего вида, док в верхнем правом углу и сохранить соотношение сторон. Это будет означать, что при просмотре на 800x480 мое изображение будет в верхнем правом углу, отображаемом на 120х120.Расположение Android, изменение размера по процентам и поддержание пропорции

Я думал, что для этого нужно использовать вертикальный LinearLayout с weightSum и layout_weights среди элементов (используя пустые элементы с layout_weight для заполнения в случае необходимости) и adjustViewBounds = true в ImageView, но я не могу чтобы получить эффект, который я собираюсь сделать. Есть идеи?

ответ

4

Вам не нужно даже беспокоиться о weightSum или adjustViewBounds, я не думаю. Однако вы должны быть на правильном пути. Попробуйте это (непроверенную) раскладку, и посмотреть, если он получает свой результат:

<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:id="@+id/qtr_img" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:src="@drawable/your_image" 
     android:scaleType="fitCenter" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     /> 
    <View 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="3" 
     /> 
</LinearLayout> 

Это просто ставит пустой вид под изображение, взвешенное взять 3/4 экрана, в то время как ImageView принимает остальные 1/4. Вы также можете использовать layout_gravity="right|top" вместо alignParentTop и alignParentRight, но я просто предпочитаю его таким образом. Дайте мне знать, если это сработает.

+0

это действительно близко, и дает тот же результат, что и куча моих предыдущих пробных ошибок, но единственное, что я до сих пор получаю, это то, что ImageView сообщает о родительском макете, который ему нужен. пространство, равное исходным размерам. Итак, мое изображение изменено, но оно помещено неправильно. Решение состояло в том, чтобы установить scaleType для fitEnd, но контейнер макета по-прежнему является неправильной шириной. Сейчас это не имеет никакого значения, поэтому я могу быть хорошим. Благодарю. – Rich

+0

Хм, хорошо, я вижу, как это произойдет. Я на самом деле думаю, что фактическое java-кодированное решение может в конечном итоге работать лучше всего на то, что вы пытаетесь сделать. Однако, если контейнер с неправильной шириной не является проблемой, попробуйте добавить еще один атрибут в свой ImageView: 'android: gravity =" top | right "'. – kcoppock

+0

Кроме того, быстрая мысль (и я мог бы быть ужасно от основания), имеет ли атрибут порядок при раздувании XML-документа? Интересно, возможно ли разместить атрибут scaleType до того, как атрибуты layout_width и layout_height могут повлиять на измерения? – kcoppock

0

и теперь, как если бы вы, например, создали форму и поддерживаете приложение на телефоне с разным разрешением, чем эмулятор (метки не выровнены). Можно ли стандартизировать разрешение, используйте «%» в качестве единицы измерения вместо px, ...?