Cómo dibujar triángulo lleno en el lienzo android

Tengo la clase MyView que extiende la clase de la visión. MyView debe dibujar triángulo lleno. Dibujé un triángulo pero no puedo llenarlo. Este es mi método 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); } 

Esto es lo que obtengo como resultado:

Introduzca aquí la descripción de la imagen

He encontrado la respuesta

 @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); } 

Es probable que necesite hacer algo como:

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

Me gustaría señalar que nunca se debe inicializar un objeto de onDraw (), ya que se llama varias veces y conduce a problemas de rendimiento.

Esta respuesta proporciona un poco de claridad sobre dónde vienen los números dados en la respuesta por @Egis. (Esto dibujará un triángulo equilátero al revés y se escribe 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 función get height es el teorema de Pitágoras y siempre encontrará que la altura de un triángulo equilátero es ~ 87% de su longitud lateral

Gist se puede encontrar aquí, contiene código para la otra dirección

  • Creación de una forma de rectángulo con sólo dos bordes redondeados
  • Crear lista de capas con esquinas redondeadas mediante programación
  • Android: Disposición con la sombra de la gota redondeada
  • ¿Puedo medir distancias con sonido en una aplicación para Android?
  • SVG a Android forma
  • Forma personalizada de Android
  • ¿Cómo crear un teclado en pantalla de Android que no es un rectángulo en la parte inferior de la pantalla?
  • ¿Cómo cambiar dinámicamente el color de la forma?
  • Texto con formas en recurso dibujable
  • Cómo crear una flecha que mira hacia la derecha usando xml formas en android?
  • ¿Cómo dibujo una flecha (en Android)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.