Androidplot 用给定的点和半径画圆
Androidplot draw circle with given point and radius
我正在使用附带 PanZoom 的 androidplot:
PanZoom.attach(plot);
因此我可以按应有的方式放大和缩小。
我接下来要做的是在给定的点画一个圆。
现在我使用 strokewidth 来设置圆的尺寸。
但是当我放大和缩小时,圆的大小保持不变,尽管它应该根据缩放级别进行缩放。所以想象一下我无限放大,圆应该在一定的缩放级别覆盖整个屏幕。
但事实并非如此。
我怎样才能做到这一点?
我正在考虑根据缩放级别增加圆的笔触宽度,但我既无法获得缩放级别,也无法获得绘图左侧和右侧的域级别。
编辑:
在 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);
缩放只影响XYSeries数据的绘制;如果您直接在 canvas 上绘制,它将准确地绘制在您在 canvas 上指定的位置,而不管 pan/zoom.
你可以做的一件事是制作系列来代表你的圆圈并在那里画圆圈。这将使圆响应平移和缩放操作。棘手的部分是选择足够的点以确保圆圈在您支持的最高缩放级别下看起来平滑。
我找到了解决问题的方法,因为我终于成功了:
to get the domain levels on the left and right side of the plot.
或者更准确地说是获取图的宽度。
由于地块的尺寸以米为单位,我计算如下:
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)));
}
它可能对那里的人有帮助...
我正在使用附带 PanZoom 的 androidplot:
PanZoom.attach(plot);
因此我可以按应有的方式放大和缩小。
我接下来要做的是在给定的点画一个圆。 现在我使用 strokewidth 来设置圆的尺寸。 但是当我放大和缩小时,圆的大小保持不变,尽管它应该根据缩放级别进行缩放。所以想象一下我无限放大,圆应该在一定的缩放级别覆盖整个屏幕。
但事实并非如此。 我怎样才能做到这一点? 我正在考虑根据缩放级别增加圆的笔触宽度,但我既无法获得缩放级别,也无法获得绘图左侧和右侧的域级别。
编辑: 在 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);
缩放只影响XYSeries数据的绘制;如果您直接在 canvas 上绘制,它将准确地绘制在您在 canvas 上指定的位置,而不管 pan/zoom.
你可以做的一件事是制作系列来代表你的圆圈并在那里画圆圈。这将使圆响应平移和缩放操作。棘手的部分是选择足够的点以确保圆圈在您支持的最高缩放级别下看起来平滑。
我找到了解决问题的方法,因为我终于成功了:
to get the domain levels on the left and right side of the plot.
或者更准确地说是获取图的宽度。
由于地块的尺寸以米为单位,我计算如下:
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)));
}
它可能对那里的人有帮助...