2011-04-15 66 views
10

我想在畫布上使用具有一定寬度的線(以像素爲單位,或理想地爲「dp」)顯示X/Y數據。我已經嘗試了Paint的setStrokeWidth(..)方法,並且確實改變了線條寬度,但它不是我所需要的。在我的情況下,我已經使用matrix.preScale(xScale,yScale)將畫布縮放到「實際工程單位」,因此X刻度表示0到100,Y是0到1.Patter對象的setStrokeWidth()方法似乎設置筆畫,使其跟隨我的矩陣preScale()設置。換句話說,水平線繪製得非常細,而垂直線繪製得非常厚。繪製具有一定像素寬度的線

有沒有一種方法來配置畫圖,以便無論繪製線的哪個方向,其寬度都是一致的像素數?

我試着定義一個Drawable,它是一行,並從中做出一個ShapeDrawable,然後將它應用到Paint上,但在運行時遇到了一些令人討厭的類鑄造錯誤。這讓我覺得這是一個錯誤的做法。但也許我放棄得太快了。

我明白這是一些可用的Android繪圖/繪圖軟件包,其中一些帶有源代碼,但我真的希望在這裏瞭解這個平臺,而不是使用第三方解決方案。

感謝您的任何提示! Rich

+0

措辭巧妙的問題。我不知道,但祝你好運。 – 2011-04-15 23:04:18

+1

我認爲你不應該使用你的單位適應矩陣。每個繪圖操作通常使用相同的管道,最終以一個形狀進行轉換和柵格化。因此,如果使用不同的軸單位,修改的矩陣會影響任何繪製操作的最終結果,從而扭曲線條行程。因此,繪製正確的方法是在將其傳遞給android繪製方法之前,按照自己想要的方式縮放座標。其他方面,你將無法畫出正確的線條和文字。 – dronus 2011-04-15 23:09:29

+0

@dronus行,聲音忠告。謝謝你。我懷疑我需要避免使用matrix preScale,但希望能夠利用這種非常有用的縮放比例。 – Rich 2011-04-15 23:37:24

回答

11

例如在Android上:paint.setStrokeWidth(3);此方法設置線寬。在這種情況下,線寬爲3像素。我在黑莓上搜索就像這種方法。

試試這個:

Graphics.setColor(Color.RED); 
    Graphics.setStrokeWidth(20); 
    Graphics.drawRect(0, 0, 100, 100); 

他們在net.rim.device.api.ui.Graphics封裝。

0

在地圖上繪製疊加層時,我不得不做類似的事情。因爲用戶可以使用多點觸摸來動態縮放地圖,所以當我進入繪製例程時,我計算x和y軸的縮放因子,將其應用於畫布,繪製地圖,然後反轉該縮放係數並將其應用於疊加層的線寬。因此畫布被縮放,覆蓋圖被縮放,然後反縮放,因此它們實際上是固定的寬度。

我發現這個作品非常好,沒有真正的性能影響。

相關問題