Android: cómo combinar las rutas de dos formas y eliminar la superposición?

Quiero crear una forma de globo de tipo globo, donde hay un rectángulo o una elipse con una forma triangular sobresaliendo de ella.

¿Cómo estoy tratando de hacer esto es crear un objeto Path que combina el triángulo con la otra forma (rect rectangular).

Lo estoy haciendo de la siguiente manera:

Path path = new Path(); // Create triangular segment Point drawOffset = getAttributes().getDrawOffset(); int leaderGap = getAttributes().getLeaderGapWidth(); // Recall that we have a coordinate system where (0,0) is the // bottom midpoint of the annotation rectangle. // the point to left of gap int x1 = -leaderGap/2; int y1 = 0; // the point to right of gap int x2 = leaderGap/2; int y2 = 0; // The point where we're drawing to; the end of the pointy segment of triangle int x3 = -drawOffset.x; int y3 = drawOffset.y; path.moveTo(x2, y2); path.lineTo(x3, y3); path.lineTo(x1, y1); // path.close(); // Add the rectangular portion to the path path.addRoundRect(backgroundShape, 5, 5, Path.Direction.CW); 

El problema es que el roundRect es un camino cerrado, por lo que su borde muestra a través de debajo de la sección triangular.

Una imagen vale más que mil palabras, así que aquí tienes:

Globo redondeado

Lo que quiero es que el segmento de línea entre esos dos extremos del triángulo desaparezca, de modo que se ve como una trayectoria perfecta.

Si todo lo que hacía era un rectángulo recto, podía crear todo el camino yo mismo desde cero. Pero me gustaría hacer las esquinas redondeadas, y sería un poco de pintura para hacer eso con el Camino (sí sé que puede hacer quad y arcTo pero todavía no es tan limpio como la solución que yo me gusta).

Así que en general, ¿es posible combinar dos caminos y crear un solo objeto de unión que traza el perímetro de ambos?

    2 Solutions collect form web for “Android: cómo combinar las rutas de dos formas y eliminar la superposición?”

    No puedo ver una manera conveniente de combinar caminos de esta manera. Normalmente lograría esto dibujando manualmente las partes rectangulares redondeadas con Path.arcTo () y Path.lineTo (), es un pequeño esfuerzo extra, pero logrará el resultado que está buscando.

    Otra opción que es quizás más flexible si usted decide cambiar el tema es usar un juego de nueve drawable hay incluso un editor para que pueda crearlos llamados Draw 9-patch

    Sí, esto es posible a partir de la API 19. Puede realizar operaciones lógicas entre 2 rutas. Como en su caso, puede crear una UNIÓN de las dos rutas, utilizando Path.op() . Para obtener una lista completa de las operaciones que se pueden realizar, consulte aquí .

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.