Масштабирование ImageView в процентах от размера дисплея

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
sanu0074
Сообщения: 80
Зарегистрирован: 30 июн 2013, 20:42
Контактная информация:

Масштабирование ImageView в процентах от размера дисплея

Сообщение sanu0074 » 22 июл 2013, 10:47

Всем привет! У меня такой вопрос образовался по разметке интерфейса, сделал прокручиваемый layout, в котором располагаются картинки и надписи для них:

Код: Выделить всё

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        
        
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/xml" />
         
		<LinearLayout
        	android:layout_width="match_parent"
       		android:layout_height="wrap_content"
        	android:orientation="vertical" 
        	android:id="@+id/lin1">
        	
              <ImageView
                android:id="@+id/imageView1"
                android:contentDescription="@string/app_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="53dp"
                android:src="@drawable/ic_launcher" />
              
        </LinearLayout>
        
    </LinearLayout>

</ScrollView>
Проблема в том что картинки подгружаются с сервера и у них не одинаковый размер, получается какой-то обкусанный список, в android к сожалению нет такого свойства width=80% (например как в CSS), как сделать так чтобы картинки имели фиксированную ширину которая зависит от ширины дисплея и задается процентным отношением?

И еще вопрос, как сделать так чтобы надпись и картинка были в одном Linearlayout (или в чем-то другом [квадрат с полями]) чтобы можно было их фон с полями выделить белым цветом, а основной ScrollView например серым...(пробовал LayoutInflater, грузил Linearlayout с отдельного файла, ничего не вышло...) Снизу картинка на которой я изобразил то что хочу представить в своем приложении:
Вложения
11111.png
11111.png (9.88 КБ) 4009 просмотров

=bor=
Сообщения: 267
Зарегистрирован: 21 мар 2013, 12:26

Re: Масштабирование ImageView в процентах от размера дисплея

Сообщение =bor= » 22 июл 2013, 12:14

sanu0074 писал(а):Проблема в том что картинки подгружаются с сервера и у них не одинаковый размер, получается какой-то обкусанный список, в android к сожалению нет такого свойства width=80% (например как в CSS), как сделать так чтобы картинки имели фиксированную ширину которая зависит от ширины дисплея и задается процентным отношением?
Сам тоже этим вопросом задавался, но %% вроде действительно нет, во всяком случае, я не нашёл.
Если действительно необходимо задать 80%, то можно попробовать обходной путь: слева и справа добавить пустые элементы (заглушки) и задать им вес по 1, а своему ImageView - 8. Это грабли, конечно, но пропорции картинок не искажаются и вы получаете требуемые 80%.
Примерно так:

Код: Выделить всё

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scroll"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"> 
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
         
            <TextView 
                android:id="@+id/textView1" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:text="@string/xml" /> 
          
        <LinearLayout
            android:id="@+id/lin1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/ImageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="53dp"
                android:layout_weight="1"
                android:contentDescription="@string/app_name"
                android:src="@drawable/ic_launcher3" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="53dp"
                android:layout_weight="8"
                android:contentDescription="@string/app_name"
                android:src="@drawable/ic_launcher1" />

              <ImageView
                  android:id="@+id/ImageView5"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="53dp"
                  android:layout_weight="1"
                  android:contentDescription="@string/app_name"
                  android:src="@drawable/ic_launcher5" />
               
        </LinearLayout> 
         
    </LinearLayout> 
 
</ScrollView> 
Ещё посмотрите в уроке №6 TableLayout, там тоже можно задавать веса.
Удачного кодинга. :)
Последний раз редактировалось =bor= 22 июл 2013, 12:24, всего редактировалось 2 раза.

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Масштабирование ImageView в процентах от размера дисплея

Сообщение Finch » 22 июл 2013, 12:17

а можно задать размер в dp и поставить ScaleType в fitXY, но картинки могут быть "растянутыми"
CEO of a company R.id.team

metrolog3005
Сообщения: 1
Зарегистрирован: 09 янв 2014, 02:34

Re: Масштабирование ImageView в процентах от размера дисплея

Сообщение metrolog3005 » 09 янв 2014, 02:35

чтобы задавать размеры элементов в процентах написал такую вот простенькую библиотеку
https://github.com/metrolog3005/percentage_view

Ответить