Question Comment peut-on déplacer le point cible d'un drag-shadow Android de son «point de contact»?


Je développe une application qui bénéficierait d'un contrôle plus précis sur l'endroit où un objet déplacé est déposé. Mais avec un écran tactile capacitif, le doigt de l'utilisateur masquera toujours la cible.

Android permet de spécifier le «point de contact» sur une ombre portée en écrasant le View.DragShadowBuilder.onProvideShadowMetrics() méthode. Mais il ne semble pas y avoir de moyen de fournir un «point cible» déplacé. Je voudrais projeter une flèche du point de contact de l'ombre portée qui peut être manoeuvrée avec plus de précision sur la cible.

Question: Quelle serait la manière la plus simple / la plus élégante d'y parvenir?

Je pense que je pourrais placer une couche invisible sur l'écran lors de l'opération glisser qui enregistre les coordonnées du point de contact, les traduit et les envoie aux cibles de dépôt réelles - réimplémenter essentiellement les événements de traînée. Mais je voudrais savoir s'il existe une solution plus simple. Ou si quelqu'un d'autre a fait quelque chose comme ça avant.


Modifier: Voici une maquette grossière du genre de drag-shadow que j'aimerais avoir:

enter image description here


15
2018-01-25 17:01


origine


Réponses:


Question: Quelle serait la manière la plus simple / la plus élégante de réaliser   ce?

Comme vous l'avez déjà vu, vous ne pouvez pas utiliser le View.DragShadowBuilder class car il n'y a aucun moyen de séparer le point du handle d'ombre et le point pris en compte pour tous les événements de déplacement envoyés. Je ne vois pas non plus d'autre moyen de réimplémenter le système de traînée, même en étendant le View classe (ce qui serait encombrant).

Je pense que je pourrais mettre une couche invisible sur l'écran pendant le glisser   opération qui enregistre les coordonnées du point de contact,   les traduit et les envoie aux cibles réelles -   réimplémenter les événements de glissement, essentiellement.

C'est une manière pour le faire et c'est assez simple si vous n'avez pas une exigence compliquée de glisser-déposer.

Mais je voudrais savoir s'il existe une solution plus simple.

Vous pourriez probablement mieux étendre les dispositions Android de base (du moins celles que vous utiliserez) et y implémenter la logique de glissement. Cela vous évitera d'avoir à gérer une autre couche et à effectuer des calculs supplémentaires. J'ai prolongé la RelativeLayout classe pour mettre en œuvre cette logique que vous peut trouver ici. J'ai utilisé cette classe dans un Activité comme ça qui a cette mise en page. L'échantillon est basique et nécessite plus de travail (et de réflexion) pour le rendre plus flexible et résoudre certains problèmes potentiels.


4
2018-02-06 09:23