Android 自定義view 之坐標(biāo)系處理

俗話說的好:好記性不如爛筆頭啊。的確如此,在這么多年的開發(fā)中,有些東西一直記,有些東西也在一直忘。需要反復(fù)的去看,去理解。但是當(dāng)你會(huì)過頭來的時(shí)候,會(huì)發(fā)現(xiàn),你又會(huì)對以前的東西有些認(rèn)知,不僅會(huì)帶你回憶當(dāng)時(shí)為什么會(huì)這樣想的,而且,還會(huì)對你現(xiàn)在的思維架構(gòu)產(chǎn)生影響,所以很多人寫博客,不光是為了給別人分享,而且還有對自己的共勉,小弟不才,文章寫的不好,有些思維邏輯性跳躍大的話,還請見諒。

Android中自定義View,一般都是重寫幾個(gè)重要的方法,比如:

  • onDraw()

  • onMeasure()

  • onLayout()

  • Layout()

今天咱們說一下在onDraw 中的一些細(xì)節(jié)。
在onDraw 一開始的時(shí)候,整個(gè)屏幕都是畫布,而且在最左上方,是畫布的一個(gè)原點(diǎn),坐標(biāo)為(0,0),向右是x軸,為正軸,向下是y軸,為正軸,如果此時(shí)調(diào)用了 canvas.traslate(x,y)
方法,是移動(dòng)的畫布的一個(gè)坐標(biāo)系,并不是移動(dòng)的整個(gè)畫布,舉一個(gè)例子:我在畫布上畫了個(gè)弧度,然后此時(shí)調(diào)用canvas.traslate(x,y)
方法,原來弧度的位置是不會(huì)再變了,下次畫筆的起始位置就是移動(dòng)后的位置,看圖說話。


移動(dòng)之前的位置

移動(dòng)之前的位置

然后我修改了代碼 在畫完內(nèi)圓的時(shí)候,移動(dòng)了畫布的坐標(biāo)系,xy分別為10


移動(dòng)之后的位置

移動(dòng)之后的位置

所以總結(jié) 畫布移動(dòng)的是坐標(biāo)系??梢詤⒖枷?a target="_blank" rel="nofollow"> canvas變換與操作

講的比較亂,既然說了移動(dòng)的是坐標(biāo)系,那咱們再來說下坐標(biāo)系的問題。


這個(gè)主要體現(xiàn)在畫弧度的時(shí)候

RectF rectF = new RectF(-radius, -radius, radius, radius); 
//畫弧度 
canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);

startAngle 起始角度,sweepAngle 是掃過的簡單,sweepAngle>0的話為順時(shí)針旋轉(zhuǎn),小于0為逆時(shí)針旋轉(zhuǎn)。大家估計(jì)要問了 0度在哪個(gè)位置?我這不會(huì)畫圖 就口述吧。0度的位置其實(shí)和數(shù)學(xué)系中的坐標(biāo)一樣的,只不過

在常見的數(shù)學(xué)坐標(biāo)系中角度增大方向?yàn)槟鏁r(shí)針,
在默認(rèn)的屏幕坐標(biāo)系中角度增大方向?yàn)轫槙r(shí)針
參考文章安卓自定義View基礎(chǔ)-角度與弧度
這一篇寫的不錯(cuò),專門介紹了角度和弧度之間的關(guān)系


先寫到這里吧,謝謝 ! 這才發(fā)現(xiàn)原來寫博客是件不容易的問題啊。

canvas.drawLine(startX,startY,stopX,stopY,paint);

這個(gè)方法畫線的時(shí)候,如果paint沒有指定StrokeWidth的時(shí)候,默認(rèn)是1個(gè)像素,如果指定寬度為10 ,這個(gè)線會(huì)以坐標(biāo)之間連接的線平均分配

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容