2014-10-12 3 views
0

У меня есть два ImageViews с одним и тем же источником изображения внутри LinearLayout, но почему второе изображение меньше первого?Почему второй идентичный ImageView внутри LinearLayout меньше?

Это исходный код:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/background_landscape" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/background_landscape" /> 

    </LinearLayout> 
</RelativeLayout> 

Screenshot ImageView with smaller image on the second image

Ошибка может быть четко воспроизводится на 800x1280 пикселей.

Как можно сделать оба изображения одинакового размера, а второе изображение обрезается в правой части экрана. (НЕ РАСПРОСТРАНЯЕТСЯ)

+1

«Почему второе изображение меньше первого?» - нет места для него того же размера, что и первый, и до сих пор он находится внутри родительского контейнера. «Как сделать оба изображения одинаковыми по размеру со вторым изображением, обрезанным в правой части экрана» - либо обрезать изображение самостоятельно, либо нарисовать изображение самостоятельно на «холсте», либо использовать отрицательный запас для второго «ImageView» проходит через границы своего контейнера 'LinearLayout'. Обратите внимание, что последний метод работает только на Android 4.0+ на основе моих экспериментов. – CommonsWare

+0

Хорошо, я понимаю ваше объяснение, но думаю, что обрезка изображения сделает код более сложным. –

ответ

1

... почему второе изображение меньше первого?

Поскольку первое изображение получает свою реальную ширину из-за wrap_content значением атрибута layout_width. И второе изображение получает ширину отдыха (ширина макета минус ширина первого изображения) от LinearLayout, что, очевидно, меньше, чем реальная ширина изображения. Вот почему он сокращается.

Как сделать оба изображения одинакового размера со вторым изображением , обрезанным в правой части экрана. (НЕ РАСПРОСТРАНЯЕТСЯ)

Вы можете использовать ScrollView, что позволяет детям выйти из границ родителей.

Обновление: как было упомянуто CommonsWare:

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="false" 
    > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/background_landscape" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/background_landscape" /> 

    </LinearLayout> 

</HorizontalScrollView> 
+1

Это должно быть «HorizontalScrollView» (с учетом изображения и ориентации LinearLayout), и предполагается, что прокрутка является приемлемым поведением здесь. – CommonsWare

+0

@beworker Это работает для меня. Спасибо, это именно то, что я хочу. Но для информации родительский элемент из HorizontalScrollView должен быть стандартным расположением, например LinearLayout, потому что изображение Hand phone исчезнет в противном случае. –

0

Как beworker сказал первое изображение получает ее ширину за счет wrap_content и второе изображение получает оставшееся доступное пространство по горизонтали. Используйте android:layout_weight="1" как в ImageViews, если вы хотите, чтобы каждый из них располагал половину доступной ширины экрана

+1

Обратите внимание, что в вопросе конкретно указано, что желаемое поведение для обрезания второго изображения; ваше решение не достигнет этого. – CommonsWare

+0

Да, как и @CommonsWare, layout_weight уменьшает размеры изображений, я не хочу уменьшать масштаб, потому что я хочу, чтобы он был базой бесконечной фоновой анимации. –

+0

Да @CommonsWare право, я любопытно прочитал вопрос a немного по диагонали sry – forcewill

Смежные вопросы