Изменение расположения элементов View на разметке

Мне необходимо изменять местоположение разных view (textView, imageView) внутри разметки RelativeLayout через Kotlin-код, работать это должно не только при нажатии кнопки.

Например, есть imageView с id = "image", у которого размеры width и height устанавливаются внутри onCreate() в значение size. Так же он изначально привязан к нижнему и левому краям со значениями 100dp. И я сдвигаю этот элемент вправо с помощью image.x = size. В итоге данное изображение сдвигается, однако выглядит это не лучшим образом: введите сюда описание изображения

Все примеры в интернете, которые я нашел, используются для Java-кода, и адаптировать его на Kotlin я не смог. Кнопка сдвигается точно так же, макет находится в первоначальном месте, а сама кнопка сдвинута. Нажатие на макет ничего не вызывает, а нажатие на кнопку обрабатывается так, как должно. Какие лучшие альтернативы этому способу?

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


Ответы (2 шт):

Автор решения: Maks

Margin можно изменять програмно вот так:

LayoutParams params = new LayoutParams(
    LayoutParams.WRAP_CONTENT,      
    LayoutParams.WRAP_CONTENT
);
params.setMargins(left, top, right, 
bottom);
yourimageview.setLayoutParams(params);
→ Ссылка
Автор решения: AnonimYs

Итак, по комментариям к вопросу и по ответу (который дан на JS, при вопросе заданном про Kotlin), все сводится к изменению image.layoutParams

Однако, данный способ не применим в Котлине:

var params = image.layoutParams
params.leftMargin = size // ошибка
image.layoutParams = params

Так как у класса ViewGroup.LayoutParams! нету свойства leftMargin (как и marginLeft, и всех остальных марджинов)

Решение данной проблемы - в том, какой именно класс мы используем. Решение следующее:

var params = image.layoutParams as ViewGroup.MarginLayoutParams
params.leftMargin = size // никакой ошибки
image.layoutParams = params

И с классом ViewGroup.MarginLayoutParams уже нет никаких проблем, и любой объект можно двигать по экрану без проблем.

→ Ссылка