/** * 计算value顶点 * * @param startAngle * @param radarEntities * @param maxRadius * @return */ private List<RadarPoint> getDataPoints(int startAngle, float maxRadius, List<RadarEntity> radarEntities) { List<RadarPoint> points = new ArrayList<>(); int count = radarEntities.size(); int avgAngle = 360 / count; for (int i = 0; i < count; i++) { RadarEntity entity = radarEntities.get(i); int angle = startAngle + avgAngle * i; float tempRadius = maxRadius * entity.getValue(); RadarPoint point = getPointAtSpecialAngle(angle, getWidth() / 2.0f, getWidth() / 2.0f, tempRadius); points.add(point); } return points; }
return; int maxHPadding = Math.max(getPaddingLeft(), getPaddingRight()); int maxVPadding = Math.max(getPaddingTop(), getPaddingBottom()); float maxRadius = getWidth() / 2.0f - layerStrokeWidth - Math.max(maxHPadding, maxVPadding); int count = radarEntities.size(); for (int i = 0; i < layerCount; i++) { float tempRadius = maxRadius - maxRadius * i / layerCount; List<RadarPoint> points = getPointsOnCircle(startAngle, count, getWidth() / 2.0f, getWidth() / 2.0f, tempRadius); drawPolygon(canvas, points, paint); pointLists.add(points); RadarPoint point1 = pointLists.get(0).get(i); RadarPoint point2 = pointLists.get(layerCount - 1).get(i); drawPolygonLine(canvas, point1, point2, paint); drawPolygon(canvas, getDataPoints(startAngle, maxRadius, radarEntities), paint); drawLabel(canvas, radarEntities.get(i), point, textPaint, vertexRadius + 8);
/** * 计算多边形顶点 * * @param startAngle * @param count * @param centerX * @param centerY * @param radius * @return */ private List<RadarPoint> getPointsOnCircle(int startAngle, int count, float centerX, float centerY, float radius) { List<RadarPoint> points = new ArrayList<>(); int avgAngle = 360 / count; for (int i = 0; i < count; i++) { int angle = startAngle + avgAngle * i; points.add(getPointAtSpecialAngle(angle, centerX, centerY, radius)); } return points; }