java - एंड्रॉइड कैनवास में एक भरे त्रिकोण को कैसे आकर्षित करें?




android google-maps (6)

आप वर्टिस का भी उपयोग कर सकते हैं:

private static final int verticesColors[] = {
    Color.LTGRAY, Color.LTGRAY, Color.LTGRAY, 0xFF000000, 0xFF000000, 0xFF000000
};
float verts[] = {
    point1.x, point1.y, point2.x, point2.y, point3.x, point3.y
};
canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.length, verts, 0, null, 0, verticesColors,   0, null, 0, 0, new Paint());

तो मैं अपने ड्रॉ विधि में नीचे दिए गए कोड का उपयोग करके एंड्रॉइड मैप्स में इस त्रिभुज को चित्रित कर रहा हूं:

paint.setARGB(255, 153, 29, 29);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Path path = new Path();
path.moveTo(point1_returned.x, point1_returned.y);
path.lineTo(point2_returned.x, point2_returned.y);
path.moveTo(point2_returned.x, point2_returned.y);
path.lineTo(point3_returned.x, point3_returned.y);
path.moveTo(point3_returned.x, point3_returned.y);
path.lineTo(point1_returned.x, point1_returned.y);
path.close();

canvas.drawPath(path, paint);

PointX_returned वे निर्देशांक हैं जिन्हें मैं फ़ील्ड से प्राप्त कर रहा हूं। वे मूल रूप से अक्षांश और अक्षांश हैं। नतीजा एक अच्छा त्रिकोण है लेकिन अंदरूनी सूत्र खाली है और इसलिए मैं नक्शा देख सकता हूं। क्या इसे किसी भी तरह से भरने का कोई तरीका है?


आपको शायद कुछ ऐसा करने की ज़रूरत है:

Paint red = new Paint();

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

और अपने ARGB के बजाय, अपने पथ के लिए इस रंग का उपयोग करें। सुनिश्चित करें कि आपके पथ का अंतिम बिंदु पहले पर समाप्त होता है, यह भी समझ में आता है।

मुझे बताओ कि यह काम करता है कृपया!


ठीक है मैंने इसे किया है। अगर किसी और को इसकी आवश्यकता होगी तो मैं इस कोड को साझा कर रहा हूं:

super.draw(canvas, mapView, true);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setStrokeWidth(2);
paint.setColor(android.graphics.Color.RED);     
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Point point1_draw = new Point();        
Point point2_draw = new Point();    
Point point3_draw = new Point();

mapView.getProjection().toPixels(point1, point1_draw);
mapView.getProjection().toPixels(point2, point2_draw);
mapView.getProjection().toPixels(point3, point3_draw);

Path path = new Path();
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(point1_draw.x,point1_draw.y);
path.lineTo(point2_draw.x,point2_draw.y);
path.lineTo(point3_draw.x,point3_draw.y);
path.lineTo(point1_draw.x,point1_draw.y);
path.close();

canvas.drawPath(path, paint);

//canvas.drawLine(point1_draw.x,point1_draw.y,point2_draw.x,point2_draw.y, paint);

return true;

संकेत निकोलस के लिए धन्यवाद!


पहले प्रारंभिक के बाद आपको path.move को हटाने की आवश्यकता है।

Path path = new Path();
path.moveTo(point1_returned.x, point1_returned.y);
path.lineTo(point2_returned.x, point2_returned.y);
path.lineTo(point3_returned.x, point3_returned.y);
path.lineTo(point1_returned.x, point1_returned.y);
path.close();

प्रत्येक lineTo() बाद moveTo() न करें lineTo()

दूसरे शब्दों में, पहले स्थान को छोड़कर प्रत्येक moveTo() हटाएं।

गंभीरता से, अगर मैं सिर्फ ओपी के कोड को कॉपी-पेस्ट करता हूं और अनावश्यक moveTo() कॉल को हटा देता moveTo() , तो यह काम करता है।

कुछ और करने की जरूरत नहीं है।

संपादित करें: मुझे पता है कि ओपी ने पहले से ही अपने "अंतिम कामकाजी समाधान" को पोस्ट किया है, लेकिन उन्होंने यह नहीं बताया कि यह क्यों काम करता है। वास्तविक कारण मुझे आश्चर्यजनक था, इसलिए मुझे जवाब जोड़ने की आवश्यकता महसूस हुई।


private void drawArrows(Point[] point, Canvas canvas, Paint paint) {

    float [] points  = new float[8];             
    points[0] = point[0].x;      
    points[1] = point[0].y;      
    points[2] = point[1].x;      
    points[3] = point[1].y;         
    points[4] = point[2].x;      
    points[5] = point[2].y;              
    points[6] = point[0].x;      
    points[7] = point[0].y;

    canvas.drawVertices(VertexMode.TRIANGLES, 8, points, 0, null, 0, null, 0, null, 0, 0, paint);
    Path path = new Path();
    path.moveTo(point[0].x , point[0].y);
    path.lineTo(point[1].x,point[1].y);
    path.lineTo(point[2].x,point[2].y);
    canvas.drawPath(path,paint);

}






android-canvas