Paint
reset()
重置Paint姚垃。setFlags(int flags)
設(shè)置一些標(biāo)志歇父,比如抗鋸齒,下劃線等等沙合。setAntiAlias(boolean aa)
設(shè)置抗鋸齒奠伪,如果不設(shè)置,加載位圖的時(shí)候可能會(huì)出現(xiàn)鋸齒狀的邊界首懈,如果設(shè)置绊率,邊界就會(huì)變的稍微有點(diǎn)模糊,鋸齒就看不到了setDither(boolean dither)
設(shè)置是否抖動(dòng)究履,如果不設(shè)置感覺(jué)就會(huì)有一些僵硬的線條滤否,如果設(shè)置圖像就會(huì)看的更柔和一些,setLinearText(boolean linearText)
這個(gè)是文本緩存最仑,設(shè)置線性文本藐俺,如果設(shè)置為true就不需要緩存setSubpixelText(boolean subpixelText)
設(shè)置亞像素,是對(duì)文本的一種優(yōu)化設(shè)置泥彤,可以讓文字看起來(lái)更加清晰明顯窟坐,可以參考一下PC端的控制面板-外觀和個(gè)性化-調(diào)整ClearType文本setUnderlineText(boolean underlineText)
設(shè)置文本的下劃線setUnderlineText(boolean underlineText)
設(shè)置文本的下劃線setStrikeThruText(boolean strikeThruText)
設(shè)置文本的刪除線setFakeBoldText(boolean fakeBoldText)
設(shè)置文本粗體
更多全棧資源請(qǐng)?jiān)L問(wèn):https://www.leachchen.com
更多資訊請(qǐng)掃碼或者加入微信群:
setFilterBitmap(boolean filter)
對(duì)位圖進(jìn)行濾波處理柴罐,如果該項(xiàng)設(shè)置為true决帖,則圖像在動(dòng)畫進(jìn)行中會(huì)濾掉對(duì)Bitmap圖像的優(yōu)化操作骨望,加快顯示setColor(int color)
設(shè)置畫筆顏色setAlpha(int a)
設(shè)置畫筆的透明度[0-255],0是完全透明爸黄,255是完全不透明setARGB(int a, int r, int g, int b)
設(shè)置畫筆顏色滞伟,argb形式alpha,red炕贵,green梆奈,blue每個(gè)范圍都是[0-255],setStrokeWidth(float width)
畫筆樣式為空心時(shí),設(shè)置空心畫筆的寬度setStrokeMiter(float miter)
當(dāng)style為Stroke或StrokeAndFill時(shí)設(shè)置連接處的傾斜度称开,這個(gè)值必須大于0亩钟,看一下演示結(jié)果setShader(Shader shader)
設(shè)置著色器乓梨,用來(lái)給圖像著色的,繪制出各種漸變效果清酥,有BitmapShader扶镀,ComposeShader,LinearGradient焰轻,RadialGradient臭觉,SweepGradient幾種setColorFilter(ColorFilter filter)
設(shè)置畫筆顏色過(guò)濾器,有ColorMatrixColorFilter辱志,LightingColorFilter蝠筑,PorterDuffColorFilter幾種,這個(gè)以后再單獨(dú)分析setXfermode(Xfermode xfermode)
設(shè)置圖形重疊時(shí)的顯示方式setPathEffect(PathEffect effect)
設(shè)置繪制路徑的效果揩懒,有ComposePathEffect什乙,CornerPathEffect,DashPathEffect已球,DiscretePathEffect臣镣,PathDashPathEffect,SumPathEffect幾種智亮,以后在單獨(dú)分析setMaskFilter(MaskFilter maskfilter)
對(duì)圖像進(jìn)行一定的處理忆某,實(shí)現(xiàn)濾鏡的效果,如濾化鸽素,立體等,有BlurMaskFilter褒繁,EmbossMaskFilter幾種setTypeface(Typeface typeface)
設(shè)置字體樣式亦鳞,可以是Typeface設(shè)置的樣式馍忽,也可以通過(guò)Typeface的createFromAsset(AssetManager mgr, String path)方法加載樣式setShadowLayer(float radius, float dx, float dy, int shadowColor)
設(shè)置陰影效果,radius為陰影角度燕差,dx和dy為陰影在x軸和y軸上的距離遭笋,color為陰影的顏色。注:在用該方法之前需要調(diào)用setLayerType( LAYER_TYPE_SOFTWARE , null);關(guān)閉硬件加速setTextLocale(Locale locale)
設(shè)置地理位置徒探,比如顯示中文瓦呼,日文,韓文等测暗,默認(rèn)的顯示Locale.getDefault()即可央串,setElegantTextHeight(boolean elegant)
設(shè)置優(yōu)雅的文字高度,這個(gè)設(shè)置可能會(huì)對(duì)FontMetrics產(chǎn)生影響setTextSize(float textSize)
設(shè)置字體大小setTextScaleX(float scaleX)
設(shè)置字體的水平方向的縮放因子碗啄,默認(rèn)值為1质和,大于1時(shí)會(huì)沿X軸水平放大,小于1時(shí)會(huì)沿X軸水平縮小setTextSkewX(float skewX)
設(shè)置文本在水平方向上的傾斜稚字,默認(rèn)值為0饲宿,推薦的值為-0.25厦酬,setLetterSpacing(float letterSpacing)
設(shè)置行的間距,默認(rèn)值是0瘫想,負(fù)值行間距會(huì)收縮setFontFeatureSettings(String settings)
設(shè)置字體樣式仗阅,可以設(shè)置CSS樣式measureText(char[] text, int index, int count),measureText(String text, int start, int end)国夜,measureText(String text)减噪,measureText(CharSequence text, int start, int end)
測(cè)量字體的長(zhǎng)度breakText(char[] text, int index, int count,float maxWidth, float[] measuredWidth),breakText(CharSequence text, int start, int end,boolean measureForwards, floatmaxWidth, float[] measuredWidth)车吹,breakText(String text, boolean measureForwards,float maxWidth, float[] measuredWidth)
剪切顯示旋廷,就是大于maxWidth的時(shí)候只截取指定長(zhǎng)度的顯示getTextWidths(char[] text, int index, int count,float[] widths),getTextWidths(CharSequence text, int start, int end, float[] widths)礼搁,getTextWidths(String text, int start, int end, float[] widths)饶碘,getTextWidths(String text, float[] widths)
提取指定范圍內(nèi)的字符串,保存到widths中getTextPath(char[] text, int index, int count, float x, float y, Path path)馒吴,getTextPath(String text, int start, int end, float x, float y, Path path)
獲取文本繪制的路徑扎运,提取到Path中getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds)
得到文本的邊界饮戳,上下左右豪治,提取到bounds中,可以通過(guò)這計(jì)算文本的寬和高
Canvas
translate(100, 50) 平移
參數(shù)1: 向X軸方向移動(dòng)100距離
參數(shù)2: 向Y軸方向移動(dòng)50距離canvas.scale(2, 4) 縮放
在X軸方向放大為原來(lái)2倍扯罐,Y軸方向方大為原來(lái)的4倍
參數(shù)1: X軸的放大倍數(shù)
參數(shù)2: Y軸的放大倍數(shù)
canvas.scale(2, 4负拟,100,100)
在X軸方向放大為原來(lái)2倍,Y軸方向方大為原來(lái)的4倍
參數(shù)1: X軸的放大倍數(shù)
參數(shù)2: Y軸的放大倍數(shù)
參數(shù)3: 原點(diǎn)X坐標(biāo)
參數(shù)4: 原點(diǎn)Y坐標(biāo)canvas.rotate(30) 旋轉(zhuǎn)
原點(diǎn)為中心歹河,旋轉(zhuǎn)30度(順時(shí)針?lè)较驗(yàn)檎较?)
參數(shù): 旋轉(zhuǎn)角度
canvas.rotate(30,100,100)
以(100,100)為中心掩浙,旋轉(zhuǎn)30度,順時(shí)針?lè)较驗(yàn)檎较?br> 參數(shù): 旋轉(zhuǎn)角度canvas.drawText(“開(kāi)始寫字了秸歧!”,50, 50, p) 畫文字
參數(shù)2:文本的x軸的開(kāi)始位置
參數(shù)2:文本Y軸的結(jié)束位置
參數(shù)3:畫筆對(duì)象
canvas.drawText(“開(kāi)始寫字了厨姚!”,2,5, 50, 50, p)
參數(shù)2:要從第幾個(gè)字開(kāi)始繪制
參數(shù)3:要繪制到第幾個(gè)文字
參數(shù)4:文本的x軸的開(kāi)始位置
參數(shù)5:文本Y軸的結(jié)束位置
參數(shù)6:畫筆對(duì)象
canvas.drawTextOnPath(“1234567890101123123”, path, 0, -50, p)
參數(shù)2:路徑
參數(shù)3:距離路徑開(kāi)始位置的偏移量
參數(shù)4:距離路徑上下的偏移量(可以為負(fù)數(shù))
參數(shù)5:畫筆對(duì)象canvas.drawCircle(200, 200, 100, p) 畫圓
參數(shù)1:圓心X
參數(shù)2:圓心Y
參數(shù)3:半徑R
參數(shù)4:畫筆對(duì)象canvas.drawLine(100, 100, 300, 300, p) 畫線
參數(shù)1:startX
參數(shù)2:startY
參數(shù)3:stopX
參數(shù)4:stopY
參數(shù)5:畫筆對(duì)象
canvas.drawLines(new float[]{100,100,200,200,200,100,300,100}, p)
同時(shí)繪制多條線。
參數(shù)1:float數(shù)組:每四個(gè)一組為一條線键菱。最后不足四個(gè)谬墙,就忽略那些值。
參數(shù)2:畫筆對(duì)象RectF oval = new RectF(150, 200, 500, 400); canvas.drawOval(oval, p) 畫橢圓
參數(shù)1:float left
參數(shù)2:float top
參數(shù)3:float right
參數(shù)4:float bottomcanvas.drawArc(oval, 20, 180, false, p) 畫弧度
參數(shù)1:RectF對(duì)象经备。
參數(shù)2:開(kāi)始的角度拭抬。(水平向右為0度順時(shí)針?lè)聪驗(yàn)檎较颍?br> 參數(shù)3:掃過(guò)的角度
參數(shù)4:是否和中心連線
參數(shù)5:畫筆對(duì)象canvas.drawRect(100,100, 200, 200, p) 畫矩形
參數(shù)1:float left
參數(shù)2:float top
參數(shù)3:float right
參數(shù)4:float bottom
canvas.drawRoundRect(oval3, 20, 5, p) 畫圓角矩形
RectF oval3 = new RectF(80, 260, 200, 300);// 設(shè)置個(gè)新的長(zhǎng)方形
canvas.drawRoundRect(oval3, 20, 5, p);//第二個(gè)參數(shù)是x半徑,第三個(gè)參數(shù)是y半徑canvas.drawPath(path, p) 畫多邊形
Path類封裝復(fù)合(多輪廓幾何圖形的路徑 由直線段*侵蒙、二次曲線,和三次方曲線造虎,也可畫以油畫。drawPath(路徑蘑志、油漆),要么已填充的或撫摸(基于油漆的風(fēng)格),或者可以用于剪斷或畫畫的文本在路徑累奈。
Path path = new Path(); 路徑對(duì)象
path.moveTo(80, 200); 此點(diǎn)為多邊形的起點(diǎn)
path.lineTo(120, 250);
path.lineTo(80, 250);
//…. 可以添加多個(gè)點(diǎn)贬派。構(gòu)成多邊形
path.close(); // 使終點(diǎn)和起點(diǎn)鏈接,構(gòu)成封閉圖形
canvas.drawPath(path, p);canvas.drawPath(path2, p) 畫貝塞爾曲線
p.setStyle(Style.STROKE);
Path path2=new Path();
path2.moveTo(100, 100);//設(shè)置Path的起點(diǎn)
path2.quadTo(300, 100, 400, 400); //設(shè)置貝塞爾曲線的控制點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo)澎媒。
參數(shù)1搞乏、2:x1,y1為控制點(diǎn)的坐標(biāo)值戒努,參數(shù)3请敦、4:x2,y2為終點(diǎn)的坐標(biāo)值
path2.quadTo(500, 700, 800, 800);
canvas.drawPath(path2, p);//畫出貝塞爾曲線canvas.drawPoint(60, 390, p) 畫一個(gè)點(diǎn)
參數(shù)1储玫、2:點(diǎn)的x侍筛、y坐標(biāo)
canvas.drawPoints(new float[]{60,400,65,400,70,400}, p) 畫多個(gè)點(diǎn)
參數(shù)1:多個(gè)點(diǎn),每?jī)蓚€(gè)值為一個(gè)點(diǎn)撒穷。最后個(gè)數(shù)不夠兩個(gè)的值匣椰,忽略。canvas.drawBitmap(bitmap, 200,300, p) 畫圖片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, 200,300, p);
參數(shù)1:bitmap對(duì)象
參數(shù)2:圖像左邊坐標(biāo)點(diǎn)
參數(shù)3:圖像上邊坐標(biāo)點(diǎn)
Path
moveTo
moveTo表示將繪制點(diǎn)移動(dòng)到某一個(gè)坐標(biāo)處端礼,該方法并不會(huì)進(jìn)行繪制禽笑,主要是用來(lái)移動(dòng)畫筆。默認(rèn)情況下起始坐標(biāo)位于(0蛤奥,0)點(diǎn)佳镜,我們可以手動(dòng)調(diào)整默認(rèn)位置。lineTo
lineTo表示繪制一條直線凡桥,參數(shù)表示目標(biāo)坐標(biāo)如下:
Path path = new Path();
path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x), getResources().getDimensionPixelSize(R.dimen.dot1x));
canvas.drawPath(path, paint);quadTo
quadTo可以用來(lái)繪制一個(gè)帶控制點(diǎn)的曲線蟀伸,說(shuō)白了,其實(shí)就是貝塞爾曲線缅刽。如下:
Path path = new Path();
path.moveTo(0, 300);
path.quadTo(150, 0, 300, 300);
canvas.drawPath(path, paint);cubicTo
cubicTo可以用來(lái)繪制具有兩個(gè)控制點(diǎn)的貝塞爾曲線啊掏,代碼如下: Path path = new Path();
path.moveTo(300, 0);
path.cubicTo(0, 150, 300, 450, 0, 600);
canvas.drawPath(path, paint);arcTo
artTo用來(lái)繪制一段圓弧,實(shí)際上是截取圓或者橢圓的一部分拷恨,比如下面一段代碼:
Path path = new Path();
RectF oval = new RectF(0, 0, 300, 300);
path.arcTo(oval, 0, 90);
canvas.drawPath(path, paint);-
addArc脖律、addRoundRect谢肾、addOval腕侄、addRect、addCircle
addArc芦疏,添加一個(gè)圓弧到路徑中冕杠,這個(gè)圓弧實(shí)為圓或者橢圓的一部分,如下一段代碼:
Path path = new Path();
RectF oval = new RectF(0, 200, 300, 500);
path.addArc(oval, 0, 180);
canvas.drawPath(path, paint);Path path = new Path();
RectF oval = new RectF(50, 50, 150, 150);
path.addRoundRect(oval,25,25, Path.Direction.CCW);
RectF oval2 = new RectF(50, 200, 250, 300);
path.addOval(oval2, Path.Direction.CCW);
RectF oval3 = new RectF(50, 350, 150, 450);
path.addRect(oval3, Path.Direction.CCW);
path.addCircle(100, 550, 50, Path.Direction.CCW);
canvas.drawPath(path, paint); Path.Op
Path.Op.DIFFERENCE表示從path中去除path2的部分酸茴,保留path的部分分预。如下案例:
Path path = new Path();
Path path2 = new Path();
path.addCircle(200, 200, 100, Path.Direction.CCW);
path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
path.op(path2, Path.Op.DIFFERENCE);
canvas.drawPath(path, paint);Path.Op.INTERSECT
Path.Op.INTERSECT表示取path和path2相交的部分顯示出來(lái),如下:
Path path = new Path();
Path path2 = new Path();
path.addCircle(200, 200, 100, Path.Direction.CCW);
path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
path.op(path2, Path.Op.INTERSECT);
canvas.drawPath(path, paint);Path.Op.REVERSE_DIFFERENCE
Path.Op.REVERSE_DIFFERENCE表示除去path的部分薪捍,只顯示path2的部分笼痹,如下:
Path path = new Path();
Path path2 = new Path();
path.addCircle(200, 200, 100, Path.Direction.CCW);
path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
path.op(path2, Path.Op.REVERSE_DIFFERENCE);
canvas.drawPath(path, paint);Path.Op.UNION
Path.Op.UNION表示path和path2的部分都要顯示出來(lái)配喳,如下:
Path path = new Path();
Path path2 = new Path();
path.addCircle(200, 200, 100, Path.Direction.CCW);
path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
path.op(path2, Path.Op.UNION);
canvas.drawPath(path, paint);Path.Op.XOR
Path.Op.XOR表示顯示path和path2但是不包含二者的交集。如下:
Path path = new Path();
Path path2 = new Path();
path.addCircle(200, 200, 100, Path.Direction.CCW);
path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
path.op(path2, Path.Op.XOR);
canvas.drawPath(path, paint);