繁体   English   中英

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数据的绘制; 如果直接在画布上绘制,则无论平移/缩放如何,都将精确地将其绘制在画布上指定的位置。

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

我终于找到了解决方案,因为我终于做到了:

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

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

由于地块的尺寸以米为单位,因此我进行如下计算:

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)));
}

可能会帮助某人...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM