Je suis en train de porter une application écrite dans un environnement graphique qui permet de dessiner en dehors des limites du rectangle de découpage. Un moyen de le faire dans Android?Puis-je dessiner hors des limites d'un canevas Android?
Répondre
Vous pouvez dessiner où vous voulez, mais rien ne sera sauvegardé en dehors du rectangle de découpage.
Pour dessiner en dehors des limites, vous devez développer le clipRect du canevas.
Consultez les méthodes surchargées clipRect sur la classe Canvas.
Remarque - Vous devez spécifier l'opération de région car l'opération par défaut est INTERSECT. Donc, quelque chose comme ceci:
Rect newRect = canvas.getClipBounds();
newRect.inset(-5, -5) //make the rect larger
canvas.clipRect (newRect, Region.Op.REPLACE);
//happily draw outside the bound now
Ça ne marche pas du tout. Je redimensionne simplement le canvas avec les paramètres (-2000, -2000), puis je le traduis mais l'image que je dessine est toujours découpée. – tomrozb
a travaillé pour moi. +1 – dac2009
mais si vous faites cela sur chaque 'onDraw (Canvas canvas)' alors ne faites-vous pas beaucoup de travail supplémentaire? –
essayer de mettre
android:clipChildren="false"
à la vue parent
Je ne connais pas la question mais je veux vous remercier pour la résolution de mon problème auquel je faisais face. Je vous remercie. C'est ce que je cherchais. – tannerjohn
S'il vous plaît jeter un oeil à http://stackoverflow.com/questions/32735119/draw-outside-the-bounds-of-an-android-canvas –
@MortezaRastgoo la question liée (et les réponses) ne se traduisent pas directement à ce problème du tout. –
Le @numan réponse a presque ok, le problème est l'allocation de mémoire avec cette approche, donc nous devrait faire cela, au lieu:
// in constructor/elsewhere
Rect newRect = new Rect();
// in onDraw
canvas.getClipBounds(newRect);
newRect.inset(0, -20); //make the rect larger
canvas.clipRect(newRect, Region.Op.REPLACE);
qui résout le problème :-)
Comment initier 'newRect'? –
Ok, je suppose que le point ici que newRect est alloué une fois par objet init, au lieu de l'allouer chaque fois que onDraw est appelé. –
J'ai essayé ça, mais ça n'a pas marché. –
Si vous voulez dessiner le texte en dehors des limites dans TextView, vous devez faire ceci:
<TextView
...
android:shadowColor="#01000000"
android:shadowDx="100" // out of right bound
android:shadowDy="0"
android:shadowRadius="1"
.../>
Il ne fonctionne pas à utiliser clipRect() comme la réponse de @ Numan parce TextView clip, il est propre rect dans onDraw():
if (mShadowRadius != 0) {
clipLeft += Math.min(0, mShadowDx - mShadowRadius);
clipRight += Math.max(0, mShadowDx + mShadowRadius);
clipTop += Math.min(0, mShadowDy - mShadowRadius);
clipBottom += Math.max(0, mShadowDy + mShadowRadius);
}
canvas.clipRect(clipLeft, clipTop, clipRight, clipBottom);
Last but not least, ne pas oublier de mettre android:clipChildren="false"
et android:clipToPadding="false"
dans votre parent ViewGroup
Nous avons aucune idée de ce que vous parlez avec un exemple et certains code – Falmarri