2017-02-13 3 views
-1

J'ai dessiné un cercle au milieu de l'écran et je veux dessiner quatre lignes a du centre du cercle vers le haut et vers le bas à gauche et à droite , Le problème est que les liens que j'ai dessinés Je ne peux pas définir leur longueurCoordonnées de drawLine

enter image description here

@Override 
protected void onDraw (Canvas canvas){ 
    super.onDraw(canvas); 
    int x = getWidth(); 
    int y = getHeight(); 
    int radius; 
    radius = 25; 
    Paint paint = new Paint() ; 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.BLACK); 
    canvas.drawPaint(paint); 
    paint.setColor(Color.WHITE); 
    canvas.drawCircle(x/2, y/2, radius, paint); 
    Paint paint1 = new Paint() ; 
    paint1.setStyle(Paint.Style.FILL); 
    paint1.setColor(Color.BLACK); 
    canvas.drawPaint(paint1); 
    paint1.setColor(Color.WHITE); 
    canvas.drawLine(x/2, y/2, x, y/2, paint1); 
    canvas.drawLine(x/2, y/2, -x, y/2, paint1); 
    canvas.drawLine(x/2, y/2, x/2, y, paint1); 
    canvas.drawLine(x/2, y/2, x/2, -y, paint1); 
} 
+0

Alors, quelle est la question? – Altoyyr

+0

@Altoyyr Je veux les coordonnées des quatre lignes – CamlX

+0

Donc - vous voulez dessiner 4 lignes? Un du centre du cercle qui monte. Un du centre du cercle qui descend. Un du centre du cercle vers la gauche. Et un du centre du cercle vers la droite. Est-ce exact? –

Répondre

0

donc, vous voulez 4 lignes - deux diagonales, les une verticale et une horizontale, tout en traversant le centre du cercle.

Tout d'abord, nous allons définir le centre du cercle:

int centerX = x/2; 
int centerY = y/2; 

Ensuite, ajoutez quelques variables auxiliaires pour la gauche, en haut, à droite et en bas pour les lignes. Nous ajoutons un peu de marge, donc il y aura de la place pour les lignes supplémentaires aux extrémités des lignes diagonales:

int margin = 10; // Arbitrary value, modify as desired 
int top = 0 + margin; 
int bottom = canvas.getHeight() - margin; 
int left = 0 + margin; 
int right = canvas.getWidth() - margin; 

Avec ceux-ci, nous pouvons tirer les lignes facilement:

// Vertical line. X coordinate = center, stretching from "top" to "bottom" 
canvas.drawLine(centerX, top, centerX, bottom); 

// Horizontal line. Y coordinate = center, stretching from "left" to "right". 
canvas.drawLine(left, centerY, right, centerY); 

// First diagonal line. Stretching from the top left corner to the bottom right corner. 
canvas.drawLine(top, left, bottom, right); 

// Second diagonal line. Stretching from the top right corner to the bottom left corner. 
canvas.drawLine(top, right, bottom, left); 

Maintenant, pour ajouter les petits segments de ligne pour la faire ressembler à une courbe:

int delta = 4; // Arbitrary value, determines how long the small lines will be. 
canvas.drawLine(top, left, top + delta, left - delta); 
canvas.drawLine(top, right, top + delta, right + delta); 
canvas.drawLine(bottom, left, bottom - delta, left - delta); 
canvas.drawLine(bottom, right, bottom - delta, right + delta); 

Si vous voulez que les courbes soient arrondies, plutôt que forte, vous avez deux options.
Le premier est juste de faire un Image transparent et le mettre sur la toile. Vous pouvez créer une image d'une ligne courbe et la mettre en miroir pour obtenir les trois autres lignes courbes.
La seconde est d'utiliser Path.cubicTo, mais c'est quelque chose que vous voudrez peut-être essayer plus tard. Il est expliqué en détail au this Stack Overflow answer si vous voulez en savoir plus.

+0

Et pour la longueur?, J'ai dessiné quatre lignes à partir du cercle, pour les quatre autres ils ne sont pas diagonaux ils ont certaines courbes – CamlX

+0

@AbbesChouokchou Hm, dépend de comment la courbe est définie . Si la courbe a l'apparence d'un "V" net, vous pouvez raccourcir les lignes en définissant des valeurs plus petites pour 'left',' right', 'top' et' bottom'. Ensuite, vous pouvez ajouter une petite ligne supplémentaire à partir de là. –

+0

pour les lignes verticales, comment puis-je changer la longueur? – CamlX