Я хотел бы сделать простой контроль: контейнер с видом внутри. Если я прикасаюсь к контейнеру и двигаю пальцем, я хочу переместить вид, следуя за моим пальцем.
Какой контейнер (макет) я должен использовать? Как это сделать?
Мне не нужно использовать поверхность, но простой макет.
Ответы:
Что-то вроде этого:
В
main.xml
толькоRelativeLayout
с@+id/root
источник
layoutPrarms.rightMargin = -250
и то же самое сbottomMargin
!! Вы можете это объяснить? Во всяком случае, большое спасибо!Я нашел простой способ сделать это с помощью ViewPropertyAnimator:
источник
setX
иsetY
напрямую, вместо применения анимации длительностью 0.Следуя подходу @Andrey, если вы хотите переместить вид из его центра, вам нужно только вычесть половину высоты и ширины вида для движения.
источник
Та же реализация в Котлине
источник
Нажмите на контейнер, и вид будет следовать за вашим пальцем.
XML-код
Java-код
источник
Я рекомендую использовать view.translationX и view.translationY для перемещения ваших просмотров.
Фрагмент Kotlin:
источник
Создайте собственный класс слушателя касания (в Kotlin):
(Этот код ограничивает ваше представление от перетаскивания из родительского представления)
Как это использовать?
parentView
является родителем вашего взгляда.источник
В коде ниже я создал нечто , называемое
RegionView
( мерзавца ), который представляет собой контейнер многократного использования, отвечающий за управление операциями перетаскивания и масштабирования для каждого из его вложенных потомков.Здесь мы манипулируем
top
иleft
коэффициентами ребенкаView
,LayoutParams
чтобы имитировать движение по диаграмме. Разъединяя интерпретацию обработки того, что понимается как операция перетаскивания, и того, что определено как операция масштабирования, мы можем обеспечить надежное манипулирование ребенкомView
.Здесь я показываю пример использования:
источник
Немного изменилось решение, предоставленное @Vyacheslav Shylkin для удаления зависимостей любых вводимых вручную чисел.
источник
В этом примере вы можете перемещать представление в пределах его родительских границ независимо от его размера, безупречной анимации и ловли щелчков.
Причина, по которой это решение превосходит другие комментарии, состоит в том, что в этом подходе используется Направленная панель, которая вычисляет себя и не будет ретранслировать позиции просмотра, которые являются источником множества ошибок.
Если у вас есть контейнер внутри ScrollView или двойной размер ScrollView, вы должны добавить эту строку в onTouch
источник
Так же, как и ответ @ Alex Karshin , я немного меняюсь.
источник