說說canvas吧(一) paint

2021-08-13 04:53:32 字數 3018 閱讀 5909

也就是畫筆,做過自定義元件的都知道,自定義元件中,畫筆是重中之中,掌握好畫筆非常重要

下面我說說畫筆的一些比較實用的操作吧

paint.setcolor(color.red);
這個方法就不多說了,就是設定畫筆顏色,當然,你要是要自定義顏色可以用mpaint.setcolor(color.parsecolor(「#ff5a5f」));

mpaint.setstrokewidth(30);
這個就是設定畫筆的寬度,

這個方法很有用,特別是畫圖案的時候,可以減少毛糙

textpaint.setantialias(true);
setstrokecap(paint.cap

.round);

畫筆筆頭一共有三種模式,

1.square:平頭,但是長一些

2.butt:平頭

3.round:圓頭

其中圓頭很多地方很有用,比如畫一些進度條什麼的

5設定漸變模式shader

漸變模式非常有趣,可以輔助你做出一些非常絢麗的模式,比如我上一章做出的小公尺時鐘就是用shader做的

shader的使用方法為

paint.setshader(mshader);
其中mshader為你新建立的shader物件,shader有多種物件可以建立

1:線性漸變

建立方式為:

mshader=new lineargradient(100,100,500,500,color.parsecolor("#e91e61"),color.parsecolor("#2196f3"),shader.tilemode

.clamp);

這個方法有七個引數,其中100,100,500,500,其實是代表乙個矩形區域,從座標(100,100)到(500,500)的乙個正方形區域,而後面兩個顏色代表的是漸變的起始和結束顏色,最後的hader.tilemode.clamp是漸變著色規則,

tilemode一共有三種模式

clamp模式:

mirror模式:

repeat模式:

其中上面的線性漸變要是化乙個圓,那麼就會像下面這樣:

shader mshader=new lineargradient(100,100,500,500,color.parsecolor("#e91e61"),color.parsecolor("#2196f3"),shader.tilemode

.clamp);

mpaint.setshadr(mshader);

canvas.drawcircle(300,300,200,mpaint);

效果圖:

2radialgradient 輻射漸變

shader=new radialgradient(300,300,200,color.parsecolor("#e91e61"),color.parsecolor("#2196f3"),shader.tilemode

.clamp)

方法解釋,前兩個引數的300,300是代表輻射的圓心位置,後面的200是這個輻射的範圍,再後面兩個引數是輻射起始和結束顏色,最後還是著色規則

3sweepgradient掃瞄漸變

shader=new sweepgradient(300,300,color.parsecolor("#e91e61"),color.parsecolor("#2196f3"),shader.tilemode

.clamp)

方法解釋,這個方法也是以圓心開始漸變,但是沒有範圍,所以只有圓心位置設定而已

效果如下

4composeshader 混合漸變,可以將兩個shader一起使用

shader shader=new composeshader(shader1,shader2,proterduff.mode

.src_over);

至於proterduff的模式如下圖

畫筆風格一種有兩種,一種是填充,一種是線條

paint.setstyle(paint.style

.fill)//實心

paint.setstyle(paint.style

.stroke)//中心線條

6還有好多,晚點在寫吧。。。

canvas和paint常用方法

protected void ondraw canvas canvas mpaint 畫多個點 bitmap bitmap bitmapfactory.decoderesource getresources r.drawable.smile 例項化乙個bitmap canvas.drawbitmap...

Canvas和Paint那點事(2)

最近在研究乙個音訊圖的繪製,用到了canvas畫圖方法,乙個奇怪的問題困擾了我好久,最後終於解決了。本來是想得到這種不斷跳動的音訊頻譜柱狀圖的 誰能想到,本想要個格格,誰知道來了個嬤嬤。得到了這樣的效果 方法一 canvas.drawcolor color.transparent,porterduf...

說說記憶體對齊吧

說說記憶體對齊 為什麼要記憶體對齊?因為cpu為了提高指令提取效率,對資料的存放位址有要求。如果不對齊,會導致效率低下,甚至錯誤。如何對齊?既然cpu已經作了規範,剩下的事情就交給編譯器了。對於程式設計師,可以告訴編譯器按照怎麼的方式去 對齊。不同的編譯器指令不一樣 1 windows的編譯器cl ...