2010-01-08 3 views
0

Description de base de ce que j'essaie de faire: Chargez une image d'arrière-plan, peignez du texte dans un nouveau calque bitmap, placez ce texte sur l'image de fond où Je veux qu'il apparaisse, puis enregistrez l'image d'arrière-plan avec le nouveau calque sur le dessus où je l'avais positionné.Ajout d'une image de superposition en position de glissement sur un bitmap final - Android

Problème: Le problème que j'ai est que lorsque je peins le texte sur l'image de fond, il se retrouve dans la mauvaise position x/y.

Par exemple: 1. Je charge une image 640x480 avec le paramètre ScaleType défini sur Fit_Start (qui le réduit à la moitié de la taille). Je garde la trace du ratio et je l'utilise pour peindre le texte sur l'image finale.

  1. Puis-je créer un bitmap overlay blanc, peinture texte sur elle, coupez l'espace transparent supplémentaire au large, et le placer dans une autre imageview (ScaleType de Matrix)

  2. Ensuite, je positionne cette nouvelle image en utilisant ma souris et la méthode onTouchEvent. Je garde la trace des X et Y:

    float X = événement.getX();

    float Y = événement.getY() - 50; // Barre de titre, barre d'état

    overlayView.layout ((int) X, (int) Y, superposition.getWidth() + (int) X, superposition.getHeight() + (int) Y);

  3. Alors je tente d'écrire le texte à l'image finale (image de fond) en utilisant le X & Y, sauf que je double X & Y depuis que je sais que l'image a été rétréci dans la moitié pour adapter à l'écran.

  4. Le résultat final est le texte en cours d'écriture au mauvais endroit. Il finit par être légèrement trop X et pas assez Y (comme 25+ selon l'échelle de l'image de fond - cela varie).

Quelque part mes calculs sont mal ou j'oublie d'ajouter quelque chose dans la formule de calcul de la position correcte sur le fond où le texte doit être peint à. Cela fait quelques heures que je travaille là-dessus et je n'ai pas réussi à cerner le problème.

La dernière chose que j'ai essayée a été de prendre en compte la barre de titre et la barre d'état, qui sur le simulateur prend jusqu'à 50 pixels. Donc, je soustrais cela de Y, ce qui est fait en faisant glisser. Mais cela ne corrige toujours pas Y étant différent des montants en fonction des dimensions de l'image de fond.

Quelqu'un at-il des idées sur ce que je fais de mal?

Répondre

0

Je ne pense pas que ce soit déjà votre problème, mais je pense que vous devez tenir compte de la densité de l'appareil. Cause barre de titre + barre d'état ne sera pas 50 px c'est 50 dip

+1

En outre, vous ne pouvez pas compter sur la barre d'état étant exactement 50dp sur tous les appareils. Je suis sûr que ce n'est pas autant que sur l'émulateur de toute façon (?) –

+0

bon point. Je commencerais le calcul à partir de votre première taille de mise en page. Cependant, cela n'explique pas la différence x. Avez-vous un rembourrage sur vos vues? Comme taille: la barre de titre est 26 barre de notification + dip. –

+0

Merci pour l'info sur la barre de titre et la barre de notification. J'ai fini par résoudre mon problème, même si je ne suis pas sûr à 100% de ce que j'ai fait depuis que j'ai fait tant de changements. Merci pour l'aide! – Greg

Questions connexes