Android 安卓雷达图

Android 安卓雷达图,android,graph,charts,radar-chart,Android,Graph,Charts,Radar Chart,我想知道是否有可能在Android中复制这种图形 直接从图像输入的数据并不重要,将在上一个屏幕上输入 如果不可能重新创建一个类似的图表(我认为这实际上相当困难),可以使用一个简单的蜘蛛图,但重要的是可以插入两个不同的系列,它们有自己的标签 事实上,请注意大写的标签形成一个曲面,而小写的标签将形成另一个曲面。 你说你能做这样的事 我找到了这个库()谁也做图形蜘蛛图,但我不能进入一个不同的系列与他的“传奇” 在图表的设计中,我已经解决了部分问题! 现在我可以绘制完全相同的表单并正确输入数据。 特别是

我想知道是否有可能在Android中复制这种图形

直接从图像输入的数据并不重要,将在上一个屏幕上输入

如果不可能重新创建一个类似的图表(我认为这实际上相当困难),可以使用一个简单的蜘蛛图,但重要的是可以插入两个不同的系列,它们有自己的标签

事实上,请注意大写的标签形成一个曲面,而小写的标签将形成另一个曲面。 你说你能做这样的事


我找到了这个库()谁也做图形蜘蛛图,但我不能进入一个不同的系列与他的“传奇”

在图表的设计中,我已经解决了部分问题! 现在我可以绘制完全相同的表单并正确输入数据。 特别是,我创建了一个扩展ImageView的自定义视图,并在onDraw(Canvas Canvas)上添加了以下代码:(我知道,代码根本没有优化,只是为了快速运行测试)

    @Override 
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        Paint paint_cibo = new Paint();
        Paint paint_vino = new Paint();
        Paint paint_text = new Paint();

        final float x = getWidth() * 1.5f;
        final float y = getHeight() * 1.5f;

        final int[] valori_cibo = new int[]{2, 5, 4, 8, 3, 5};
        final int[] valori_vino = new int[]{6, 7, 7, 6, 6, 6};

        canvas.drawColor(Color.WHITE);

        paint.setAntiAlias(true);
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE); 
        paint.setStrokeWidth(2f);

        paint_cibo.setAntiAlias(true);
        paint_cibo.setColor(Color.BLUE);
        paint_cibo.setStyle(Paint.Style.STROKE);
        paint_cibo.setStrokeWidth(2f);

        paint_vino.setAntiAlias(true);
        paint_vino.setColor(Color.RED);
        paint_vino.setStyle(Paint.Style.STROKE);
        paint_vino.setStrokeWidth(2f);

        paint_text.setAntiAlias(true);
        paint_text.setColor(Color.BLACK);
        paint_text.setStyle(Paint.Style.FILL);
        paint_text.setTextSize(10);

        // Draw the circles
        for(int i = 1; i <= 110; i += 10)
            canvas.drawCircle(x, y, i, paint);

        // Draw the intersection lines
        canvas.drawLine(x + 10, y - 2.5f, (float)(x + 10 + 110 * Math.cos(returnGradi(90))), (float)(y - 2.5f - 110 * Math.sin(returnGradi(90))), paint);

        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(45))), (float)(y - 110 * Math.sin(returnGradi(45))), paint);
        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(30))), (float)(y - 110 * Math.sin(returnGradi(30))), paint);

        canvas.drawLine(x + 10, y - 5, (float)(x + 10 + 110 * Math.cos(returnGradi(315))), (float)(y - 5 - 110 * Math.sin(returnGradi(315))), paint);
        canvas.drawLine(x, y + 8, (float)(x + 110 * Math.cos(returnGradi(315))), (float)(y + 8 - 110 * Math.sin(returnGradi(315))), paint);

        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(280))), (float)(y - 110 * Math.sin(returnGradi(280))), paint);
        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(260))), (float)(y - 110 * Math.sin(returnGradi(260))), paint);

        canvas.drawLine(x - 10, y - 5, (float)(x - 10 + 110 * Math.cos(returnGradi(225))), (float)(y - 5 - 110 * Math.sin(returnGradi(225))), paint);
        canvas.drawLine(x, y + 8, (float)(x + 110 * Math.cos(returnGradi(225))), (float)(y + 8 - 110 * Math.sin(returnGradi(225))), paint);

        canvas.drawLine(x - 10, y - 2.5f, (float)(x - 10 + 110 * Math.cos(returnGradi(90))), (float)(y - 2.5f - 110 * Math.sin(returnGradi(90))), paint);
        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(135))), (float)(y - 110 * Math.sin(returnGradi(135))), paint);
        canvas.drawLine(x, y, (float)(x + 110 * Math.cos(returnGradi(150))), (float)(y - 110 * Math.sin(returnGradi(150))), paint);

        // Draw the numbers
        for(int i = 1; i <= 10; i++)
            canvas.drawText(String.valueOf(i), x - 2.5f, y - i * 10, paint_text);


        //Start drawing food
        canvas.drawLine((float)(x + valori_cibo[0] * 10 * Math.cos(returnGradi(45))), (float)(y - valori_cibo[0] * 10 * Math.sin(returnGradi(45))), (float)(x + valori_cibo[1] * 10 * Math.cos(returnGradi(30))), (float)(y - valori_cibo[1] * 10 * Math.sin(returnGradi(30))), paint_cibo);
        canvas.drawLine((float)(x + valori_cibo[1] * 10 * Math.cos(returnGradi(30))), (float)(y - valori_cibo[1] * 10 * Math.sin(returnGradi(30))), (float)(x + valori_cibo[2] * 10 * Math.cos(returnGradi(280))), (float)(y - valori_cibo[2] * 10 * Math.sin(returnGradi(280))), paint_cibo);
        canvas.drawLine((float)(x + valori_cibo[2] * 10 * Math.cos(returnGradi(280))), (float)(y - valori_cibo[2] * 10 * Math.sin(returnGradi(280))), (float)(x + valori_cibo[3] * 10 * Math.cos(returnGradi(260))), (float)(y - valori_cibo[3] * 10 * Math.sin(returnGradi(260))), paint_cibo);
        canvas.drawLine((float)(x + valori_cibo[3] * 10 * Math.cos(returnGradi(260))), (float)(y - valori_cibo[3] * 10 * Math.sin(returnGradi(260))), (float)(x + valori_cibo[4] * 10 * Math.cos(returnGradi(150))), (float)(y - valori_cibo[4] * 10 * Math.sin(returnGradi(150))), paint_cibo);
        canvas.drawLine((float)(x + valori_cibo[4] * 10 * Math.cos(returnGradi(150))), (float)(y - valori_cibo[4] * 10 * Math.sin(returnGradi(150))), (float)(x + valori_cibo[5] * 10 * Math.cos(returnGradi(135))), (float)(y - valori_cibo[5] * 10 * Math.sin(returnGradi(135))), paint_cibo);
        canvas.drawLine((float)(x + valori_cibo[5] * 10 * Math.cos(returnGradi(135))), (float)(y - valori_cibo[5] * 10 * Math.sin(returnGradi(135))), (float)(x + valori_cibo[0] * 10 * Math.cos(returnGradi(45))), (float)(y - valori_cibo[0] * 10 * Math.sin(returnGradi(45))), paint_cibo);

        //Start drawing Wine
        canvas.drawLine((float)(x + 10 + valori_vino[0] * 10 * Math.cos(returnGradi(90))), (float)(y - valori_vino[0] * 10 * Math.sin(returnGradi(90))), (float)(x + 10 + valori_vino[1] * 10 * Math.cos(returnGradi(315))), (float)(y - 5 - valori_vino[1] * 10 * Math.sin(returnGradi(315))), paint_vino);
        canvas.drawLine((float)(x + 10 + valori_vino[1] * 10 * Math.cos(returnGradi(315))), (float)(y - 5 - valori_vino[1] * 10 * Math.sin(returnGradi(315))), (float)(x + 5 + valori_vino[3] * 10 * Math.cos(returnGradi(315))), (float)(y + 10 - valori_vino[3] * 10 * Math.sin(returnGradi(315))), paint_vino);
        canvas.drawLine((float)(x + 5 + valori_vino[3] * 10 * Math.cos(returnGradi(315))), (float)(y + 10 - valori_vino[3] * 10 * Math.sin(returnGradi(315))), (float)(x + 5 + valori_vino[3] * 10 * Math.cos(returnGradi(225))), (float)(y + 5 - valori_vino[3] * 10 * Math.sin(returnGradi(225))), paint_vino);
        canvas.drawLine((float)(x + 5 + valori_vino[3] * 10 * Math.cos(returnGradi(225))), (float)(y + 5 - valori_vino[3] * 10 * Math.sin(returnGradi(225))), (float)(x - 5 + valori_vino[4] * 10 * Math.cos(returnGradi(225))), (float)(y - 8 - valori_vino[4] * 10 * Math.sin(returnGradi(225))), paint_vino);
        canvas.drawLine((float)(x - 5 + valori_vino[4] * 10 * Math.cos(returnGradi(225))), (float)(y - 8 - valori_vino[4] * 10 * Math.sin(returnGradi(225))), (float)(x - 10 + valori_vino[5] * 10 * Math.cos(returnGradi(90))), (float)(y - valori_vino[5] * 10 * Math.sin(returnGradi(90))), paint_vino);
        canvas.drawLine((float)(x - 10 + valori_vino[5] * 10 * Math.cos(returnGradi(90))), (float)(y - valori_vino[5] * 10 * Math.sin(returnGradi(90))), (float)(x + 10 + valori_vino[0] * 10 * Math.cos(returnGradi(90))), (float)(y - valori_vino[0] * 10 * Math.sin(returnGradi(90))), paint_vino);
}
@覆盖
公共空白onDraw(画布){
super.onDraw(帆布);
油漆=新油漆();
油漆油漆_cibo=新油漆();
油漆油漆=新油漆();
油漆油漆_text=新油漆();
最终浮点数x=getWidth()*1.5f;
最终浮动y=getHeight()*1.5f;
final int[]valori_cibo=新int[]{2,5,4,8,3,5};
final int[]valori_vino=新int[]{6,7,7,6,6};
画布。drawColor(颜色。白色);
paint.setAntiAlias(真);
油漆。设置颜色(颜色。黑色);
绘制.设置样式(绘制.样式.笔划);
油漆。设置行程宽度(2f);
绘制cibo.setAntiAlias(真);
油漆_cibo.setColor(颜色:蓝色);
绘制cibo.setStyle(绘制样式笔划);
油漆的设定行程宽度(2f);
油漆的颜色和颜色(真实);
油漆颜色设置颜色(颜色为红色);
绘画风格(绘画风格笔划);
油漆颜色设置行程宽度(2f);
paint_text.setAntiAlias(真);
绘制文本设置颜色(颜色为黑色);
paint_text.setStyle(paint.Style.FILL);
绘制文本。设置文本大小(10);
//画圆圈
对于(int i=1;i