2011-04-15 8 views
10

Je voudrais afficher des données X/Y sur une toile en utilisant des lignes d'une certaine largeur (en pixels, ou "dp" idéalement). J'ai essayé la méthode setStrokeWidth (..) de Paint, et cela change effectivement la largeur de la ligne mais ce n'est pas ce dont j'ai besoin. Dans mon cas, j'ai redimensionné mon canevas en «unités d'ingénierie réelles» en utilisant matrix.preScale (xScale, yScale) de sorte que l'échelle X représente 0 à 100 et Y est 0 à 1. La méthode setStrokeWidth() de l'objet Paint semble pour définir le trait de sorte qu'il suive les paramètres de ma matrice preScale(). En d'autres termes, les lignes horizontales sont très minces et les lignes verticales sont vraiment épaisses.Tracer une ligne avec une certaine largeur de pixel

Existe-t-il un moyen de configurer la peinture de sorte que quelle que soit la direction dans laquelle la ligne est dessinée, sa largeur est un nombre cohérent de pixels?

J'ai essayé de définir un dessin qui est une ligne et de créer un ShapeDrawable à partir de cela, puis de l'appliquer à la peinture, mais rencontré de vilaines erreurs de casting de classe au moment de l'exécution. Cela m'a fait penser que c'était la mauvaise façon de s'y prendre. Mais peut-être que j'ai abandonné trop tôt. Je comprends qu'un certain nombre de paquets de traçage/cartographie Android sont disponibles, certains avec la source, mais je cherche vraiment à comprendre la plate-forme ici, plutôt que d'utiliser une solution tierce.

Merci pour tous les conseils! Rich

+0

Question bien libellée. Je ne sais pas, mais bonne chance. –

+1

Je pense que vous ne devriez pas utiliser la matrice pour l'adaptation de votre unité. Chaque opération de dessin utilise généralement le même pipeline qui finit avec une forme qui est ensuite transformée et pixellisée. Ainsi, une matrice modifiée influence le résultat final de toute opération de dessin, déformant ainsi le trait si des unités d'axe différentes sont utilisées. Donc, pour tracer le bon chemin serait de mettre à l'échelle vos coordonnées comme vous le souhaitez avant de passer aux méthodes de peinture android. Sinon, vous seriez incapable de dessiner des lignes et du texte corrects. – dronus

+0

@dronus OK, un conseil judicieux. Merci pour ça. Je soupçonnais que j'aurais besoin d'éviter la matrice pré-échelle, mais espérais qu'il pourrait y avoir un moyen de profiter de cette mise à l'échelle très utile. – Rich

Répondre

11

Par exemple sur Android: paint.setStrokeWidth (3); Cette méthode définit la largeur de ligne. Dans ce cas, la largeur de ligne est de 3 pixels. Je cherche juste comme cette méthode sur BlackBerry.

Essayez ceci:

Graphics.setColor(Color.RED); 
    Graphics.setStrokeWidth(20); 
    Graphics.drawRect(0, 0, 100, 100); 

Ils sont disponibles dans le paquet net.rim.device.api.ui.Graphics.

0

Je devais faire quelque chose de similaire en dessinant des superpositions sur une carte. Comme l'utilisateur peut utiliser la touche multi-touch pour redimensionner la carte de façon dynamique, je calcule un facteur de mise à l'échelle pour les axes x et y, l'applique au canevas, dessine la carte, puis inverser cette mise à l'échelle. factoriser et l'appliquer aux largeurs de ligne pour les superpositions. Ainsi, la toile est mise à l'échelle et les superpositions sont mises à l'échelle, puis anti-échelle, de sorte qu'elles sont en effet de largeur fixe.

J'ai trouvé que cela fonctionne très bien sans réel impact sur les performances.

Questions connexes