Search code examples
androidpolygonandroidplot

How to draw a polygon with androidPlot library?


I'm trying to draw a polygon with AndroidPlot library.
I'm successfully drawing the four points, but it draws only 3 sides of the polygon. (it's not closing the polygon)
The polygon should be filled. How can I achieve this?

Thanks!

Edit:

I'm firstly drawing a point and then the polygon, because I have to show if that point will be inside the polygon.

private XYPlot plot;
plot = (XYPlot) findViewById(R.id.graph);

seriesPointFormat = new LineAndPointFormatter(
                    null,                   // line color
                    Color.rgb(5, 100, 150),                   // point color
                    null,                                   // fill color
                    new PointLabelFormatter()); 

            float[] xTol = intent.getExtras().getFloatArray("tolerancesX");
            float[] yTol = intent.getExtras().getFloatArray("tolerancesY");

            Float[] xTolerances = new Float[xTol.length];
            Float[] yTolerances = new Float[yTol.length];

        for(int i = 0; i< xTol.length; i++)
            xTolerances[i] = xTol[i];

        for(int i = 0; i< yTol.length; i++)
            yTolerances[i] = yTol[i];

            //Example
            x=0.35f;
            y=0.65f;
            //Turn the above arrays into XYSeries':
            XYSeries seriesPoint = new SimpleXYSeries(
                  Arrays.asList(x),       
                  Arrays.asList(y), 
                  "point");                          // Set the display title of the series

            plot.getGraphWidget().setDomainValueFormat(new DecimalFormat("##.###"));

            // add a new series' to the xyplot:
            plot.addSeries(seriesPoint, seriesPointFormat);

            XYSeries seriesPolygon = new SimpleXYSeries(
                    Arrays.asList(xTolerances), 
                    Arrays.asList(yTolerances), 
                    "Polygon");

            LineAndPointFormatter seriesPolygonFormat = new LineAndPointFormatter(
                    Color.rgb(500, 0, 0),  // line color
                    Color.rgb(500, 100, 0), // point color
                    null, 
                    new PointLabelFormatter());

            seriesPolygonFormat.getLinePaint().setStrokeWidth(2);

            plot.addSeries(seriesPolygon, seriesPolygonFormat);

Solution

  • The answer is obvious, stupid me...(Facepalm)

    You just have to add the first point at the end of the array.

            Float[] xTolerances = new Float[xTol.length+1];
            Float[] yTolerances = new Float[yTol.length+1];
            for(int i = 0; i< xTol.length; i++)
                xTolerances[i] = xTol[i];
            //add here the first x coordinate at the end of the array
            xTolerances[xTol.length] = xTol[0];
    
            for(int i = 0; i< yTol.length; i++)
                yTolerances[i] = yTol[i];
            //add here the first x coordinate at the end of the array
            yTolerances[yTol.length] = yTol[0];
    

    And to fill in the polygon:

    LineAndPointFormatter seriesPolygonFormat = new LineAndPointFormatter(
                    Color.rgb(500, 0, 0),  // line color
                    Color.rgb(500, 100, 100), // point color
                    Color.argb(50, 200, 0, 0), //fill color with alpha, to make the fill transparent
                    new PointLabelFormatter());
    

    I will not cancel the question, maybe will be useful to someone.