Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Androidplot用给定的点和半径绘制圆_Java_Android_Geometry_Androidplot - Fatal编程技术网

Java Androidplot用给定的点和半径绘制圆

Java Androidplot用给定的点和半径绘制圆,java,android,geometry,androidplot,Java,Android,Geometry,Androidplot,我正在使用附带PanZoom的androidplot: PanZoom.attach(plot); 因此,我可以放大和缩小,因为它应该 我接下来要做的是在给定的点上画一个圆。 现在我使用strokewidth设置圆的尺寸。 但是当我放大和缩小时,圆的大小保持不变,尽管它应该根据缩放级别进行缩放。假设我无限放大,圆圈应该以一定的放大倍数覆盖整个屏幕 但事实并非如此。 我怎样才能做到这一点? 我想根据zoomlevel增加圆圈的笔划宽度,但我既无法获得zoomlevel,也无法获得绘图左侧和右侧的

我正在使用附带PanZoom的androidplot:

PanZoom.attach(plot);
因此,我可以放大和缩小,因为它应该

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

但事实并非如此。 我怎样才能做到这一点? 我想根据zoomlevel增加圆圈的笔划宽度,但我既无法获得zoomlevel,也无法获得绘图左侧和右侧的域级别

编辑: 在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"/>

缩放仅影响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)));
}

这可能会对其他人有所帮助…

你创建圆的代码是什么?嗨,我真的很高兴能进行平移缩放等等,唯一的问题是,圆的像素大小保持不变。但当我放大时,我希望圆圈变大,反之亦然。我明白你关于将圆表示为点的观点。唯一的问题是,这个圆是动态的,所以它变化很大。如果运行androidplot的示例应用程序,您可以清楚地看到我的问题。我希望气泡图示例中的气泡根据缩放级别改变大小…啊,我以为你只是在画布上画圆圈…没有意识到你在使用气泡系列。你想做的是可能的-我会更新我的答案,一旦我在一个地方,我可以写一些代码:pI有机会玩这一点,今天很快就遇到了麻烦;由于域/范围通常是完全独立的缩放/值类型,并且可以独立缩放,因此,如果不将气泡缩放限制为在单个轴上缩放事件,或者为定义每个轴的一种缩放系数的序列添加其他属性,则无法仅基于缩放缩放缩放气泡大小。你知道这些方法中哪一种最适合你的用例吗?嗨,尼克,你使用哪种类型的缩放?我正在使用以下命令:
panzoom=panzoom.attach(plot);panzoom.setZoom(panzoom.Zoom.SCALE)
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)));
}