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