也就是畫筆,做過自定義元件的都知道,自定義元件中,畫筆是重中之中,掌握好畫筆非常重要
下面我說說畫筆的一些比較實用的操作吧
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 ...