Реагируйте на встроенное перетаскивание, всегда сверху - PullRequest
0 голосов
/ 30 апреля 2020

Что я пытаюсь сделать:

У меня есть два прокручиваемых списка, отображаемых рядом. Каждый содержит несколько «слотов». Я хочу иметь возможность перетаскивать элементы из одного слота в другой, как внутри, так и между списками. Я хочу, чтобы перетаскивание было анимированным, и чтобы перетаскиваемый элемент появлялся поверх всего остального на странице.

Я видел множество обучающих руководств по перетаскиванию, которые используют PanResponder или PanGestureHandler и различные библиотеки анимации, но большинство из них не гарантируют, что перетаскиваемый элемент всегда остается поверх всего остального на странице. Похоже, что zIndex для реагирующих нативных элементов определяется в первую очередь порядком, в котором элементы отображаются на странице. Большинство учебных пособий тщательно продуманы, чтобы один элемент, который можно перетаскивать, был указан после различных зон перетаскивания, чтобы он всегда отображался сверху.

Существует только один пример, который я изучал, где перетаскиваемый элемент всегда появляется поверх всего, что является: 30-дневным уроженцем FangWei (день 18) . Этот пример работает путем динамического изменения порядка элементов, так что выбранный элемент перемещается в конец массива элементов. Он использует один PanResponder для всей страницы, а не один для перетаскиваемого элемента и определяет, какой элемент был выбран для перетаскивания, на основе арифметики c, включающей координаты страницы, где начинается событие касания. Это не слишком абстрактный способ выбора различных элементов в разных местах на экране. В моем случае у меня есть два прокручиваемых списка, которые действуют как контейнеры.

Итак, мои вопросы:

  1. Может кто-нибудь указать на пример, который уже делает что-то подобное?
  2. Является ли динамическое изменение родительского компонента таким образом, чтобы перетаскиваемый элемент добавлялся последним, наилучший способ обеспечить его отображение поверх всего остального? Я думал о том, чтобы иметь что-то вроде наложения, которое отображает анимированный клон элемента, который в данный момент перетаскивается.
  3. Должен ли я использовать один PanResponder для всей страницы или один для перетаскиваемого компонента?
  4. Я полагаю, что PanResponder лучше, чем PanGestureHandler, поскольку жест PanResponder может существовать после изменения состояния, вызывающего повторную визуализацию?

Спасибо!

...