paint坠非,Canvas中的常用方法總結(jié)
Paint類的常用方法
- setColor 方法 误澳,用于設(shè)置畫筆的顏色
- setAlpha 方法耻矮,用于設(shè)置畫筆的透明度
setAlpha(a : Int) 參數(shù) a 為透明度,其范圍值為 0~255 忆谓,數(shù)值越小越透明
- setStyle 方法裆装,用于設(shè)置畫筆的風(fēng)格,可以指定是空心還是實心,該方法在矩形哨免、圓形有明顯效果勾扭。
setStyle (style : Paint.Style)//參數(shù) style 為畫筆風(fēng)格
Style.FILL : 實心
Style.FILL_AND_stroke : 實心和空心
Style.stroke : 空心
- setStrokeWidth 方法,用于設(shè)置畫筆的空心線寬铁瞒,該方法在矩形、圓形桅滋、等圖形中有明顯效果
setStrokeWidth(width : Float) // 參數(shù) width 為線寬慧耍,浮點型數(shù)組
- setTextSize 方法,用于是個設(shè)置畫筆的字體大小丐谋,主要用于繪制字符串
setTextSize(textSize : Float)
- setTypeface 方法用于設(shè)置畫筆的字體樣式芍碧,可以使用系統(tǒng)自帶的字段,也可以使用自定義的字體
setTypeface (typeface : Typeface) // typeface 為字體樣式
Typeface.DEFAULT : 默認(rèn)字體
Typeface.DEFAULT_BOLD : 加粗字體
Typeface.MONOSPACE : monospace字體
Typeface.SANS_SERIF : sans字體
Typeface.SERIF : serif字體
- setTextScaleX 方法.用于設(shè)置畫筆字體的比例因子号俐,默認(rèn)為1泌豆,當(dāng)大于1時表示橫向拉伸,小于1時表示橫向壓縮
setTextScaleX(float scaleX)
- setARGB方法吏饿,用于設(shè)置畫筆的顏色和透明度
setARGB( a : Int ,r : Int,g : Int,b : Int)
參數(shù)a為透明度踪危,范圍 0~255
參數(shù)r為紅色的顏色值,范圍 0~255
參數(shù)g為綠色的顏色值猪落,范圍 0~255
參數(shù)b為藍(lán)色的顏色值贞远,范圍 0~255
- setUnderLineText 方法 ,用于設(shè)置畫筆的下劃線
setUnderlineText(Boolean underlintext)
- setTextSkewX 方法笨忌,用于設(shè)置畫筆的傾斜因子
setTextSkewX(float skewX)
參數(shù)skewX為傾斜因子蓝仲,正數(shù)表示向左傾斜,負(fù)數(shù)表示向右傾斜
Canvas類的常用方法
對 Canvas 進(jìn)行操作
- Canvas 平移
/**
* 畫布向(100官疲,50)方向平移
*
* 參數(shù)1: 向X軸方向移動100距離
* 參數(shù)2: 向Y軸方向移動50距離
*/
canvas.translate( 100 , 50 )
- Canvas 縮放
/**
* 在X軸方向放大為原來2倍袱结,Y軸方向方大為原來的4倍
* 參數(shù)1: X軸的放大倍數(shù)
* 參數(shù)2: Y軸的放大倍數(shù)
*/
canvas.scale( 2 , 4 );
/**
* 在X軸方向放大為原來2倍,Y軸方向方大為原來的4倍
* 參數(shù)1: X軸的放大倍數(shù)
* 參數(shù)2: Y軸的放大倍數(shù)
* 參數(shù)3: 原點X坐標(biāo)
* 參數(shù)4: 原點Y坐標(biāo)
*/
canvas.scale( 2 , 4 途凫, 100 , 100 );
- Canvas 旋轉(zhuǎn)
/**
* 原點為中心垢夹,旋轉(zhuǎn)30度(順時針方向為正方向 )
* 參數(shù): 旋轉(zhuǎn)角度
*/
canvas.rotate( 30 );
/**
* 以(100,100)為中心,旋轉(zhuǎn)30度颖榜,順時針方向為正方向
* 參數(shù): 旋轉(zhuǎn)角度
*/
canvas.rotate( 30 , 100 , 100 );
Canvas 操作例子
Paint p = new Paint(); p.setColor(Color.argb( 50 , 255 , 100 , 100 )); canvas.drawRect( 0 , 0 , 200 , 200 ,p); // 以原始Canvas畫出一個矩形1 canvas.translate( 300 , 300 ); // 將Canvas平移 (100,100) p.setColor(Color.argb( 50 , 100 , 255 , 100 )); canvas.drawRect( 0 , 0 , 200 , 200 ,p); // 矩形2 canvas.rotate( 30 ); //將Canvas旋轉(zhuǎn)30 p.setColor(Color.argb( 50 , 100 , 0 , 255 )); canvas.drawRect( 0 , 0 , 200 , 200 ,p); // 矩形3 canvas.scale( 2 , 2 ); // 將Canvas以原點為中心棚饵,放大兩倍 p.setColor(Color.argb( 50 , 255 , 255 , 0 )); canvas.drawRect( 0 , 0 , 200 , 200 ,p); // 矩形4
- Canvas 保存和還原
Canvas提供了幾個方法,讓我們可以方便的對Canvas的狀態(tài)進(jìn)行更改和還原掩完。
這些方法是:save() 噪漾、restore() 、restoreToCount(int saveCount)
我們在對Canvas進(jìn)行平移且蓬、旋轉(zhuǎn)欣硼、放大等操作時候,可以調(diào)用save()方法恶阴,將當(dāng)前修改過的Canvas狀態(tài)進(jìn)行保存诈胜,調(diào)用restore() 方法后豹障,會將Canvas還原成最近的一個save() 的狀態(tài)。
save()方法還會有一個返回值焦匈,我們也可以調(diào)用restoreToCount(int saveCount)方法血公,將這個返回值作為參數(shù)傳遞進(jìn)去,就可以將Canvas還原成某一個特定的save()狀態(tài)缓熟。
canvas.translate( 100 , 100 ); // 平移(100,100)
int save1 = canvas.save(); // 保存Canvas狀態(tài)(狀態(tài)1)
canvas.scale( 2 , 2 ); // 放大2倍
int save2 = canvas.save(); // 保存Canvas狀態(tài)(狀態(tài)2)
canvas.restore(); // 返回最新的save狀態(tài)累魔,即狀態(tài)2
canvas.restoreToCount(save1); // 手動指定的返回到 狀態(tài)1
- Canvas畫圖實例
1、畫文字
/**
* 參數(shù)2:文本的x軸的開始位置
* 參數(shù)2:文本Y軸的結(jié)束位置
* 參數(shù)3:畫筆對象
*/
canvas.drawText( "開始寫字了够滑!" , 50 , 50 , p); // 畫文本
/**
* 參數(shù)2:要從第幾個字開始繪制
* 參數(shù)3:要繪制到第幾個文字
* 參數(shù)4:文本的x軸的開始位置
* 參數(shù)5:文本Y軸的結(jié)束位置
* 參數(shù)6:畫筆對象
*/
canvas.drawText( "開始寫字了垦写!" , 2 , 5 , 50 , 50 , p); // 畫文本,結(jié)果為:“寫字了”
/**
* 參數(shù)2:路徑
* 參數(shù)3:距離路徑開始位置的偏移量
* 參數(shù)4:距離路徑上下的偏移量(可以為負(fù)數(shù))
* 參數(shù)5:畫筆對象
*/
canvas.drawTextOnPath( "1234567890101123123" , path, 0 , - 50 , p);
2彰触、畫圓
/**
* 參數(shù)1:圓心X
* 參數(shù)2:圓心Y
* 參數(shù)3:半徑R
* 參數(shù)4:畫筆對象
*/
canvas.drawCircle( 200 , 200 , 100 , p);
3梯投、畫線
/*
* 參數(shù)1:startX
* 參數(shù)2:startY
* 參數(shù)3:stopX
* 參數(shù)4:stopY
* 參數(shù)5:畫筆對象
*/
canvas.drawLine(100, 100, 300, 300, p);// 畫線
/*
* 同時繪制多條線。
* 參數(shù)1:float數(shù)組:每四個一組為一條線况毅。最后不足四個分蓖,就忽略那些值。
* 參數(shù)2:畫筆對象
*/
canvas.drawLines( new float []{ 100 , 100 , 200 , 200 , 200 , 100 , 300 , 100 }, p);
4俭茧、 畫橢圓
/*
* 參數(shù)1:float left
* 參數(shù)2:float top
* 參數(shù)3:float right
* 參數(shù)4:float bottom
*/
RectF oval = new RectF( 150 , 200 , 500 , 400 ); // 畫一個橢圓
canvas.drawOval(oval, p);
5咆疗、畫弧度
/**
* 畫圓弧
* 參數(shù)1:RectF對象。
* 參數(shù)2:開始的角度母债。(水平向右為0度順時針反向為正方向)
* 參數(shù)3:掃過的角度
* 參數(shù)4:是否和中心連線
* 參數(shù)5:畫筆對象
*/
canvas.drawArc(oval, 20 , 180 , false , p);
6午磁、畫矩形
/**
* 矩形
* 參數(shù)1:float left
* 參數(shù)2:float top
* 參數(shù)3:float right
* 參數(shù)4:float bottom
*/
canvas.drawRect( 100 , 100 , 200 , 200 , p);
//畫圓角矩形
RectF oval3 = new RectF( 80 , 260 , 200 , 300 ); // 設(shè)置個新的長方形
canvas.drawRoundRect(oval3, 20 , 5 , p); //第二個參數(shù)是x半徑,第三個參數(shù)是y半徑
7毡们、畫多邊形
/**
* Path類封裝復(fù)合(多輪廓幾何圖形的路徑
* 由直線段*迅皇、二次曲線,和三次方曲線,也可畫以油畫衙熔。drawPath(路徑登颓、油漆),要么已填充的或撫摸
* (基于油漆的風(fēng)格),或者可以用于剪斷或畫畫的文本在路徑。
*/
Path path = new Path(); // 路徑對象
path.moveTo( 80 , 200 ); // 此點為多邊形的起點
path.lineTo( 120 , 250 );
path.lineTo( 80 , 250 );
//.... 可以添加多個點红氯。構(gòu)成多邊形
path.close(); // 使終點和起點鏈接框咙,構(gòu)成封閉圖形
canvas.drawPath(path, p);
8、 畫貝塞爾曲線
p.setStyle(Style.STROKE);
Path path2= new Path();
path2.moveTo( 100 , 100 ); //設(shè)置Path的起點
/**
* 參數(shù)1痢甘、2:x1喇嘱,y1為控制點的坐標(biāo)值
* 參數(shù)3、4:x2塞栅,y2為終點的坐標(biāo)值
*/
path2.quadTo( 300 , 100 , 400 , 400 ); //設(shè)置貝塞爾曲線的控制點坐標(biāo)和終點坐標(biāo)
path2.quadTo( 500 , 700 , 800 , 800 );
canvas.drawPath(path2, p); //畫出貝塞爾曲線
9者铜、畫點
/**
* 參數(shù)1、2:點的x、y坐標(biāo)
*/
canvas.drawPoint( 60 , 390 , p); //畫一個點
/**
* 參數(shù)1:多個點作烟,每兩個值為一個點愉粤。最后個數(shù)不夠兩個的值,忽略拿撩。
*/
canvas.drawPoints( new float []{ 60 , 400 , 65 , 400 , 70 , 400 }, p); //畫多個點
10衣厘、畫圖片