Просмотр изображений в RelativeLayout странно обрезается, когда layout_marginLeft или layout_marginTop установлены слишком высоко

#android #android-layout

#Android #android-макет

Вопрос:

Итак, я разрешаю пользователю перетаскивать RelativeLayout, содержащийся в ImageView (а также некоторые другие материалы) по экрану. Макет оборачивает ImageView внутри, и есть другой относительный макет, который помещает материал поверх ImageView. Что-то вроде этого:

 <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center"
    />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        ... a couple text views that also fill parent

    </RelativeLayout>
</RelativeLayout>
  

Я динамически устанавливаю src для ImageView.

Пользователь может перетащить макет в другой RelativeLayout, который занимает весь экран. Когда пользователь перемещает его, я изменяю левое и верхнее поля. Я вижу странную проблему, когда, когда макет достигает правого или нижнего краев экрана, макет (и, следовательно, изображение, которое он переносит) …

  • Обрезается с левой стороны, поскольку правая сторона макета выходит за пределы правой части экрана
  • Обрезается с верхней стороны, поскольку нижняя сторона макета выходит за нижнюю часть экрана.

При перетаскивании макета к левому краю или верхнему краю экрана проблем вообще не возникает.

Я попытался изменить scaleType ImageView на все другие значения, прежде чем понял, что проблема, похоже, заключается в том, что на самом деле причиной этого является окружающий RelativeLayout (например, когда я меняю scaleType ImageView на fitXY, изображение сжимается до крошечного размера, поскольку макет перетаскивается за край экрана).

Я также пытался переключать все параметры макета, которые мог найти, включая clipChildren, clipPadding, adjustViewBounds, margin, padding и т.д., И ничего, что действительно работало. Я ломаю голову над этой простой проблемой, которая, как я думал, должна работать только с параметрами по умолчанию. Чтобы было понятно, я ожидаю, что при перетаскивании макета за край экрана часть, которая находится за пределами экрана, просто больше не отображается, а материал, который находится на экране, остается как есть.

Ответ №1:

Я не думаю, что Margin обычно позволяет отображать часть вашего представления за пределами экрана. Вам придется увеличить поле, чтобы margin size < родительский размер (чтобы он оставался на экране). Однако вы могли бы попробовать установить отрицательное правое и нижнее поле (сомневаюсь, что это сработает).