2013-06-23 2 views
0

У меня есть горизонтальный LinearLayout в Android с 5 изображениями в нем. Я хочу, чтобы 5 изображений соответствовали экрану горизонтально, сохраняя соотношение сторон. Каждое изображение имеет размер 128x128 пикселей. Проблема состоит в том, что в то время как ширина устанавливается как то, что я хотел высота изображений остаются неизменными, так что они выглядят как это на большом экране (это Nexus 7):Android - горизонтальные изображения, чтобы соответствовать экрану

enter image description here

Что я сейчас:

<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:cropToPadding="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/image01" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/image02" /> 

    <ImageView 
     android:id="@+id/imageView3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/image03" /> 

    <ImageView 
     android:id="@+id/imageView4" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/image04" /> 

    <ImageView 
     android:id="@+id/imageView5" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/image05" /> 

</LinearLayout> 

Спасибо за помощь

+0

Вы в порядке с изменением размера – MDMalik

ответ

0

изменить scaleType к centerInside или fitCenter и высоты, чтобы соответствовать родителю.

+0

Я пробовал это, но тогда Android не масштабирует изображения вообще, то есть ширина остается неизменной, только между ними будут пробелы. Мне нужно, чтобы изображения касались. – user2001951

+0

масштабирование изображений и поддержание соотношения сторон не так прямолинейны. вам, возможно, придется это сделать вручную. Что касается касания изображений к краям ImageView, то только centerCrop делает это, сохраняя соотношение сторон. Но он вырезает часть изображения и будет делать это только в том случае, если изображение больше, чем изображение, не думайте, что оно работает для меньших изображений. –

+0

Да, я думаю, что я собираюсь пойти и использовать минимальную высоту на linearlayout с ресурсом, отличающимся для каждого размера экрана. Это решение, которое я знаю сейчас. Спасибо за ответ кстати. – user2001951

0

пытаются окружить ImageView с горизонтальным LinearLayout

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_gravity="center"> 

     <ImageView 
      android:id="@+id/btnHome" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="btnhome" /> 

    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_gravity="center"> 
     <ImageView 
      android:id="@+id/btnGames" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="btngames" /> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_gravity="center"> 
     <ImageView 
      android:id="@+id/btnNews" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="btnnews"/> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_gravity="center"> 
     <ImageView 
      android:id="@+id/btnPayment" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tag="btnpayment"/> 
    </LinearLayout> 

затем измените scaleType на fitCenter.

это приведет к тому, что ваши снимки будут иметь правильное соотношение, которое вы просматриваете на более широком экране.

0

Я нашел код, чтобы создать квадратный вид, что я мог бы использовать, чтобы сделать свои собственные графики в Вы должны быть в состоянии что-то вроде этого:.

public class SquareImageView extends ImageView { 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); 
     int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); 
     int length = Math.min(width, height); 
     setMeasuredDimension(length, length); 
    } 
} 

Я не пробовал этот код возведения в квадрат в LinearLayout, но при использовании RelativeLayout, где он был расположен первым и прикреплен к трем размерам родителя, он работал красиво. Это надеется, что ImageView подойдет к изображению, иначе вам придется переопределить метод onDraw().