Androidplot绘制具有给定点和半径

时间:2017-01-02 14:40:24

标签: java android geometry androidplot

我正在使用安装了PanZoom的androidplot:

PanZoom.attach(plot);

因此我可以放大和缩小它。

我接下来想要的是在给定点画一个圆圈。 现在我使用笔触宽度来设置圆的尺寸。 但是当我放大和缩小时,圆圈尺寸保持不变,尽管它应该根据缩放级别进行缩放。所以想象一下我无限放大,圆圈应该在一定量的缩放级别覆盖整个屏幕。

但事实并非如此。 我怎样才能做到这一点? 我正在考虑根据缩放级别大声增加圆的笔画宽度,但是我既不能获得缩放级别也不能获得绘图左侧和右侧的域级别。

编辑: 在xml文件夹中,我创建一个文件,例如circle.xml:

<?xml version="1.0" encoding="utf-8"?>
<config
fillPaint.color="#00000000"
linePaint.color="#00000000"
linePaint.strokeWidth="0dp"
pointLabelFormatter.textPaint.color="#FFFFFF"
vertexPaint.color="#371cd1d4"
vertexPaint.strokeWidth="20dp"/>

和java

    sigmaLabelFormatter = new LineAndPointFormatter();
    sigmaLabelFormatter.setPointLabelFormatter(new PointLabelFormatter());
    sigmaLabelFormatter.configure(activity.getApplicationContext(), R.xml.circle);
    sigmaLabelFormatter.setPointLabelFormatter(null);

2 个答案:

答案 0 :(得分:0)

缩放仅影响XYSeries数据的绘制;如果直接在画布上绘制,它将精确绘制在画布上指定的位置,而不管平移/缩放。

你可以做的一件事是制作一系列代表你的圆圈并在那里画圆圈。这将使圆圈响应平移和缩放操作。棘手的部分将选择足够的点,以确保圆圈在您支持的最高缩放级别下显得平滑。

答案 1 :(得分:0)

我找到了解决问题的方法,因为我最终成功了:

  

获取图表左侧和右侧的域级别。

或者更精确地得到图的宽度。

由于图的尺寸以米为单位,我按如下方式进行计算:

private float calculateDP(float px){        
  return px / (densityDpi / densityDefault);
}

private float pixelsPerMeter(float value){
    float w = plot.getGraph().getWidgetDimensions().canvasRect.width();
    float w2 = plot.getBounds().getWidth().floatValue();
    return value * (w / w2);
}

private void init(Activity activity){
    densityDpi = activity.getResources().getDisplayMetrics().densityDpi;
    densityDefault = android.util.DisplayMetrics.DENSITY_DEFAULT;
}

private void onCreate(){
// ... lots of stuff
labelFormatter.getVertexPaint().setStrokeWidth(calculateDP(pixelsPerMeter(2)));
}

可能会帮助那里的人......