Comment dessiner un triangle rempli sur Android

J'ai une classe MyView qui étend la classe View. MyView devrait dessiner un triangle rempli. J'ai dessiné un triangle mais je ne peux pas le remplir. C'est ma méthode onDraw ():

@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(android.graphics.Color.BLACK); canvas.drawPaint(paint); paint.setStrokeWidth(4); paint.setColor(android.graphics.Color.RED); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setAntiAlias(true); Point a = new Point(0, 0); Point b = new Point(0, 100); Point c = new Point(87, 50); Path path = new Path(); path.setFillType(FillType.EVEN_ODD); path.moveTo(ax, ay); path.lineTo(bx, by); path.moveTo(bx, by); path.lineTo(cx, cy); path.moveTo(cx, cy); path.lineTo(ax, ay); path.close(); canvas.drawPath(path, paint); } 

C'est ce que j'obtiens en conséquence:

Entrez la description de l'image ici

  • Dessinez le carré avec des coins arrondis
  • Android - peint le bitmap tourné vers un emplacement spécifique sur un canevas
  • Est-il possible d'afficher un texte multicolore avec un appel vers Canvas.drawText ()?
  • Enregistrer les chemins de volet vers SharedPreference et redessiner sur un canevas lorsque l'application est rouverte
  • Dessiner le texte multi-lignes sur Toile
  • Obtenir un bitmap à partir de CustomView
  • La toile Android supprime le chemin précédent dessiné
  • Faire défiler une toile en douceur dans Android
  • 5 Solutions collect form web for “Comment dessiner un triangle rempli sur Android”

    J'ai trouvé la réponse

     @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(android.graphics.Color.BLACK); canvas.drawPaint(paint); paint.setStrokeWidth(4); paint.setColor(android.graphics.Color.RED); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setAntiAlias(true); Point a = new Point(0, 0); Point b = new Point(0, 100); Point c = new Point(87, 50); Path path = new Path(); path.setFillType(FillType.EVEN_ODD); path.lineTo(bx, by); path.lineTo(cx, cy); path.lineTo(ax, ay); path.close(); canvas.drawPath(path, paint); } 

    Vous devez probablement faire quelque chose comme:

     Paint red = new Paint(); red.setColor(android.graphics.Color.RED); red.setStyle(Paint.Style.FILL); 

    Je tiens à souligner que vous ne devriez jamais initier un objet à partir de OnDraw () tel qu'il s'appelle plusieurs fois et entraîne des problèmes de performances.

    Cette réponse fournit un peu de clarté sur l'origine des nombres donnés dans la réponse de @Egis. (Cela va dessiner un triangle équilatéral à l'envers et est écrit en kotlin)

     class TriangleView(context: Context?, attrs: AttributeSet?) : View(context, attrs) { val paint = Paint() val path = Path() override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) canvas ?: return canvas.drawPath(configurePath(canvas.width.toFloat(), path), configurePaint(paint)) } fun getHeight(width: Double): Float { return Math.sqrt((Math.pow(width, 2.0) - Math.pow((width / 2), 2.0))).toFloat() } fun configurePaint(paint: Paint): Paint { paint.color = android.graphics.Color.WHITE paint.isAntiAlias = true return paint } fun configurePath(width: Float, path: Path): Path { path.lineTo((width / 2f), getHeight(width.toDouble())) path.lineTo(width, 0F) path.lineTo(0f, 0f) return path } } 

    La fonction de hauteur de gain est le théorème de Pythagore et trouvera toujours la hauteur d'un triangle équilatéral à ~ 87% de sa longueur latérale

    Gist peut être trouvé ici, il contient un code pour l'autre direction

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.