Как можно удалить «целевую точку» теневой тени Android из ее «точки касания»?

Я разрабатываю приложение, которое будет полезно для более точного контроля над тем, куда удаляется объект с перетаскиванием. Но с емкостным сенсорным экраном пальчик пользователя всегда будет скрывать цель падения.

Android позволяет «сенсорную точку» на тень перетаскивания указывать путем перезаписи View.DragShadowBuilder.onProvideShadowMetrics() . Но, похоже, не существует способа обеспечить перемещенную «целевую точку». Я хотел бы проецировать стрелку с сенсорной точки теневой тени, которая может быть маневрирована на целевой камере с большей точностью.

Вопрос: Какой будет самый простой / самый элегантный способ достичь этого?

Я думаю, что я мог бы поместить невидимый слой поверх экрана во время операции перетаскивания, которая регистрирует координаты точки касания, переводит их и отправляет их в фактические целевые объекты перетаскивания. Но я хотел бы знать, есть ли более простое решение. Или если кто-то еще сделал что-то подобное раньше.


Редактировать: Вот грубый макет теневой тени, который я хотел бы иметь:

Введите описание изображения здесь

Solutions Collecting From Web of "Как можно удалить «целевую точку» теневой тени Android из ее «точки касания»?"

Вопрос: Какой будет самый простой / самый элегантный способ достичь этого?

Как вы уже видели, вы не можете использовать класс View.DragShadowBuilder поскольку нет способа отделить точку теневого дескриптора и точку, принятую во внимание для всех отправленных событий перетаскивания. Я также не вижу другого способа переопределения системы перетаскивания, даже расширяя класс View (что было бы громоздким).

Я думаю, что я мог бы поместить невидимый слой поверх экрана во время операции перетаскивания, которая регистрирует координаты точки касания, переводит их и отправляет их в фактические целевые объекты перетаскивания.

Это один из способов сделать это, и это довольно просто, если у вас нет сложного требования перетаскивания.

Но я хотел бы знать, есть ли более простое решение.

Возможно, вам лучше расширить базовые макеты Android (по крайней мере, те, которые вы будете использовать) и реализовать там логику перетаскивания. Это позволит вам избежать необходимости управления другим уровнем, а также сделать некоторые дополнительные вычисления. Я расширил класс RelativeLayout чтобы реализовать эту логику, которую вы можете найти здесь . Я использовал этот класс в Activity, подобном этому, который имеет этот макет . Образец является базовым, и ему требуется больше работы (и мышления), чтобы сделать его более гибким, а также решить некоторые потенциальные проблемы.