2017-01-02 101 views
0

我使用androidplot與PanZoom附:Androidplot繪製圓,給點和半徑

PanZoom.attach(plot); 

因此我可以放大和縮小,因爲它應該。

我要的未來是在給定的點畫圓。 現在我使用strokewidth來設置圓的尺寸。 但是,當我放大和縮小時,圓的大小保持不變,儘管它應根據縮放級別進行縮放。所以想象我無限放大,圓圈應該以一定的縮放級別覆蓋整個屏幕。

但事實並非如此。 我該如何做到這一點? 我想阿博德根據縮放級別增加圓的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); 
+0

什麼是你創建的圈子代碼? – Danieboy

回答

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

也許它幫助別人那裏......

0

變焦僅影響XYSeries數據的繪製;如果您直接在畫布上繪製,則無論是否進行平移/縮放,它都會完全繪製在畫布上指定的位置。

一兩件事你可以儘管做的是使系列來代表你的圈子,並繪製圈子裏。這將使圓圈響應平移和縮放操作。棘手的部分將挑選足夠的點以確保圓圈在您支持的最高縮放級別下平滑。

+0

嗨, 我真的很滿意PanZoom等,唯一的問題是,這個圓的像素尺寸保持不變。 但是,當我放大,我想圓做大,反之亦然。 我看到你關於以點表示圓的觀點。唯一的問題是,這個圓是動態的,所以它變化很大。 如果您運行androidplot的示例應用程序,您可以清楚地看到我的問題。我希望氣泡圖示例中的氣泡根據縮放級別改變它們的大小... – Johan

+0

啊我以爲你只是在畫布上繪製圓圈......沒有意識到你正在使用氣泡系列。你想要做的事情是可能的 - 在我可以寫一些代碼的地方,我不得不更新我的答案:p – Nick

+0

今天我有機會玩這個小遊戲,很快就遇到了一個複雜的問題;因爲域/範圍通常是完全獨立的尺度/值類型,並且可以獨立縮放,所以沒有簡單的方法來基於縮放單純地縮放氣泡大小,而沒有限制氣泡縮放以在單個軸上縮放事件,或向其添加附加屬性系列爲每個軸定義一種比例係數。你知道哪些方法最適合你的用例嗎? – Nick