2010-07-23 3 views
2

Je sais comment faire glisser une boule en étendant View et en remplaçant OnDraw, puis en calculant les nouvelles coordonnées et en redessinant ma boule. Et si j'avais des centaines de formes à l'intérieur de cette vue et que je devais déplacer la vue entière avec toutes les formes ensemble. Recalculer pour chaque forme ne semble pas réalisable. Sur l'Iphone, je peux dessiner un tas de choses à l'intérieur d'une vue, puis déplacer la vue entière et prendre soin de dessiner les choses à l'intérieur de la vue pour moi. Je n'ai qu'à recalculer les coordonnées de la vue, puis définir la position non pour tout à l'intérieur de la vue. Est-ce possible sur Android?Comment déplacer/faire glisser une vue Android entière qui contient un tas de formes à l'intérieur?

Merci, Steven

+0

Android ne fait-il pas le calcul pour nous? Si vous effectuez invalidate() sur la vue, puis vous remplacez la méthode onDraw pour dessiner au nouvel emplacement? comme la hiérarchie des vues à l'intérieur de celui-ci est attachée à elle, cela devrait fonctionner? (suggérant seulement ce qui me semble logique, aucune certitude) – Sephy

+0

Donc vous dites que je devrais avoir une vue à l'intérieur d'une vue? En ce moment je rend invalide() et redéfinit OnDraw mais dans OnDraw vous devez refaire manuellement votre dessin en lui donnant de nouvelles coordonnées et si j'ai des centaines de choses à dessiner je devrais donner de nouvelles coordonnées à tout ce que je dessine dedans vue. Autant que je sache, le fait de surcharger OnDraw vous donne le contrôle total de dessiner la vue. – user377597

Répondre

0

Utilisez la méthode Canvas.translate() pour compenser tout en cours d'élaboration au sein de votre gestionnaire onDraw().

Effectuez le suivi des décalages de traduction en fonction du mouvement du curseur ou autre, et utilisez ces décalages dans votre appel au translate().

Vous pouvez faire un effet similaire avec Canvas.scale() pour gérer le zoom pincé.

Ne pas oublier à save() et restore() pour mettre le Canvas à son état d'origine!

Si vous voulez simplement déplacer une vue dans une autre vue, ajustez simplement les propriétés haut/gauche et appelez Invalidate(). Si c'est une mise en page complexe, faites tout dans un RelativeLayout et utilisez le LayoutParams pour tout positionner.

Questions connexes