MoonlightShadow Posté(e) 10 mars 2010 Share Posté(e) 10 mars 2010 Bonjour, comment faire pour placer une view en absolu? Avant il existait l'AbsoluteLayout pour ça, mais depuis quelques versions il est deprecated. Est-ce qu'il y a une solution? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gyscos Posté(e) 10 mars 2010 Share Posté(e) 10 mars 2010 Il est deprecated car son utilisation est déconseillée, en effet, un placement absolu rend plus difficile l'adaptation à de multiples résolutions d'écrans, et est contraire à ce qu'Android essaye de faire. Mais si tu en as vraiment besoin, tu peux l'utiliser. Sinon, peut-être qu'un RelativeLayout avec des marges dans les LayoutParams peut avoir le même effet, sans utiliser de classe dépréciée. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 10 mars 2010 Auteur Share Posté(e) 10 mars 2010 Quel que soit la raison pour laquelle il est devenu deprecated, je préfère ne pas l'utiliser du coup... Mais je suis bien obligé de placer ma view en absolu, je vais donc tester avec les marges... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 10 mars 2010 Share Posté(e) 10 mars 2010 Si tu nous présentes plus de détails sur ton interface on pourra peut-être te conseiller une meilleure façon de faire plutôt que ce "bien obligé de placer ma view en absolu". Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 10 mars 2010 Auteur Share Posté(e) 10 mars 2010 En fait je dois faire un module de réalité augmenté. Et pour placer des vues par dessus la caméra je pense ne pas avoir d'autres solutions que de les placer en absolu! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 10 mars 2010 Share Posté(e) 10 mars 2010 Les SurfaceView ne peuvent pas servir pour gérer ce genre de choses ? (j'en ai jamais utilisé perso) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 11 mars 2010 Auteur Share Posté(e) 11 mars 2010 D'après ce que j'en ai compris (je débute Android), les SurfaceView sont plutot faites pour faire du dessin, par pour contenir d'autres Views... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 11 mars 2010 Auteur Share Posté(e) 11 mars 2010 J'ai trouvé une méthode de View, offsetLeftAndRight (avec l'équivalent offsetTopAndBottom), qui permet de décaler la view. Cependant le comportement est assez étrange puisque j'ai l'impression que ça décale que temporairement, et surtout si on l'appelle comme ça ça ne fait rien! J'ai réussi à avoir un décalage lorsque je l'ai appelée depuis un autre thread. Quelqu'un connait cette fonction et sait également comment l'utiliser? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 22 mars 2010 Auteur Share Posté(e) 22 mars 2010 Bon j'ai réussi à placer mes vues en absolu en faisant mon propre layout de placement en absolu... Mais il me reste un problème qui ne vient pas de mon layout puisque en utilisant l'AbsoluteLayout (deprecated), j'ai le même bug. En fait quand je place ma vue dans mon layout de sorte qu'elle dépasse de l'écran (ne serait-ce que d'un pixel) sur le haut, le bas ou la droite ya aucun problème (elle s'affiche bien, tronquée par le bord de l'écran). Mais si je fais la même chose sur le coté gauche de l'écran, elle n'apparaît pas du tout! Est-ce que quelqu'un sait pourquoi? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 22 mars 2010 Share Posté(e) 22 mars 2010 Ca ressemblerait à une optimisation qui dirait que si le point de référénce du placement de la vue à dessiner est en dehors de l'écran, il n'est pas utile de la dessiner. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 22 mars 2010 Auteur Share Posté(e) 22 mars 2010 Ben ouais mais dans ce cas pourquoi elle s'affiche bien des trois autres côtés? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 22 mars 2010 Share Posté(e) 22 mars 2010 Pas de problème si tu dépasses par le haut ? A droite et en bas ca s'expliquerait par le fait que le point de référence de la vue dessinée, qui se trouve en haut à gauche, ne sort pas de l'écran quand tu débordes. Tout le mécanisme de dessin est décrit ici : http://developer.android.com/guide/topics/ui/how-android-draws.html Il est indiqué notamment: The framework will not draw Views that are not in the invalid region, and also will take care of drawing the Views background for you. You can force a View to draw, by calling invalidate(). Tu risques de devoir surcharger onMeasure() et/ou onLayout() quelque part... J'en sais pas plus. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 22 mars 2010 Auteur Share Posté(e) 22 mars 2010 Non pas de problèmes par le haut... c'est d'autant plus bizarre que mon appli est en landscape, donc ça devrait poser problème pour le haut et la gauche si c'était une histoire du point haut-gauche! En ce qui concerne la surcharge de onMeasure et/ou onLayout, vu que j'ai fait mon propre layout, ces méthodes sont déjà toutes les deux surchargées, et je ne sais pas quoi faire de plus dedans... Sinon une idée pour faire autrement? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 22 mars 2010 Share Posté(e) 22 mars 2010 Une SurfaceView est une View et non pas un ViewGroup donc il n'est pas possible d'y ajouter des sous-vues. offsetLeftAndRight et offsetTopAndBottom marche très bien mais leur action n'est valable que jusqu'au projet relayout. A mon avis c'est que tu effectues des requestLayout() et c'est pour ça que ça change ;). Pour le problème de vues qui ne s'affiche pas, on dirait un problème dans tes calculs. Le framework regarde l'intersection des frames de chaque vues pour savoir si cela vaut le coup ou non de dessiner. Affiche les positionnements de tes vues à chaque instant et tu verra si une valeur ne devient pas absurde ;). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
MoonlightShadow Posté(e) 22 mars 2010 Auteur Share Posté(e) 22 mars 2010 Je viens de comprendre le pourquoi du problème (pas encore la solution ^^ ). En effet la frame de la view était sortie du viewgroup, le problème c'est que je ne le savais pas puisque la view n'est pas dessinée dans sa frame (j'y ai appliqué une rotation de 90 degrés depuis son point 0,0 !). Mais bon maintenant que je sais pourquoi je vais pouvoir avancer (mais après manger ^^ ) Merci pour vos réponses Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 22 mars 2010 Share Posté(e) 22 mars 2010 LOL de rien ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.