Android自定義View之API

Paint

  1. reset()
    重置Paint姚垃。

  2. setFlags(int flags)
    設(shè)置一些標(biāo)志歇父,比如抗鋸齒,下劃線等等沙合。

  3. setAntiAlias(boolean aa)
    設(shè)置抗鋸齒奠伪,如果不設(shè)置,加載位圖的時(shí)候可能會(huì)出現(xiàn)鋸齒狀的邊界首懈,如果設(shè)置绊率,邊界就會(huì)變的稍微有點(diǎn)模糊,鋸齒就看不到了

  4. setDither(boolean dither)
    設(shè)置是否抖動(dòng)究履,如果不設(shè)置感覺(jué)就會(huì)有一些僵硬的線條滤否,如果設(shè)置圖像就會(huì)看的更柔和一些,

  5. setLinearText(boolean linearText)
    這個(gè)是文本緩存最仑,設(shè)置線性文本藐俺,如果設(shè)置為true就不需要緩存

  6. setSubpixelText(boolean subpixelText)
    設(shè)置亞像素,是對(duì)文本的一種優(yōu)化設(shè)置泥彤,可以讓文字看起來(lái)更加清晰明顯窟坐,可以參考一下PC端的控制面板-外觀和個(gè)性化-調(diào)整ClearType文本

  7. setUnderlineText(boolean underlineText)
    設(shè)置文本的下劃線

  8. setUnderlineText(boolean underlineText)
    設(shè)置文本的下劃線

  9. setStrikeThruText(boolean strikeThruText)
    設(shè)置文本的刪除線

  10. setFakeBoldText(boolean fakeBoldText)
    設(shè)置文本粗體

更多全棧資源請(qǐng)?jiān)L問(wèn):https://www.leachchen.com

image

更多資訊請(qǐng)掃碼或者加入微信群:

image
  1. setFilterBitmap(boolean filter)
    對(duì)位圖進(jìn)行濾波處理柴罐,如果該項(xiàng)設(shè)置為true决帖,則圖像在動(dòng)畫進(jìn)行中會(huì)濾掉對(duì)Bitmap圖像的優(yōu)化操作骨望,加快顯示

  2. setColor(int color)
    設(shè)置畫筆顏色

  3. setAlpha(int a)
    設(shè)置畫筆的透明度[0-255],0是完全透明爸黄,255是完全不透明

  4. setARGB(int a, int r, int g, int b)
    設(shè)置畫筆顏色滞伟,argb形式alpha,red炕贵,green梆奈,blue每個(gè)范圍都是[0-255],

  5. setStrokeWidth(float width)
    畫筆樣式為空心時(shí),設(shè)置空心畫筆的寬度

  6. setStrokeMiter(float miter)
    當(dāng)style為Stroke或StrokeAndFill時(shí)設(shè)置連接處的傾斜度称开,這個(gè)值必須大于0亩钟,看一下演示結(jié)果

  7. setShader(Shader shader)
    設(shè)置著色器乓梨,用來(lái)給圖像著色的,繪制出各種漸變效果清酥,有BitmapShader扶镀,ComposeShader,LinearGradient焰轻,RadialGradient臭觉,SweepGradient幾種

  8. setColorFilter(ColorFilter filter)
    設(shè)置畫筆顏色過(guò)濾器,有ColorMatrixColorFilter辱志,LightingColorFilter蝠筑,PorterDuffColorFilter幾種,這個(gè)以后再單獨(dú)分析

  9. setXfermode(Xfermode xfermode)
    設(shè)置圖形重疊時(shí)的顯示方式

  10. setPathEffect(PathEffect effect)
    設(shè)置繪制路徑的效果揩懒,有ComposePathEffect什乙,CornerPathEffect,DashPathEffect已球,DiscretePathEffect臣镣,PathDashPathEffect,SumPathEffect幾種智亮,以后在單獨(dú)分析

  11. setMaskFilter(MaskFilter maskfilter)
    對(duì)圖像進(jìn)行一定的處理忆某,實(shí)現(xiàn)濾鏡的效果,如濾化鸽素,立體等,有BlurMaskFilter褒繁,EmbossMaskFilter幾種

  12. setTypeface(Typeface typeface)
    設(shè)置字體樣式亦鳞,可以是Typeface設(shè)置的樣式馍忽,也可以通過(guò)Typeface的createFromAsset(AssetManager mgr, String path)方法加載樣式

  13. 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)閉硬件加速

  14. setTextLocale(Locale locale)
    設(shè)置地理位置徒探,比如顯示中文瓦呼,日文,韓文等测暗,默認(rèn)的顯示Locale.getDefault()即可央串,

  15. setElegantTextHeight(boolean elegant)
    設(shè)置優(yōu)雅的文字高度,這個(gè)設(shè)置可能會(huì)對(duì)FontMetrics產(chǎn)生影響

  16. setTextSize(float textSize)
    設(shè)置字體大小

  17. setTextScaleX(float scaleX)
    設(shè)置字體的水平方向的縮放因子碗啄,默認(rèn)值為1质和,大于1時(shí)會(huì)沿X軸水平放大,小于1時(shí)會(huì)沿X軸水平縮小

  18. setTextSkewX(float skewX)
    設(shè)置文本在水平方向上的傾斜稚字,默認(rèn)值為0饲宿,推薦的值為-0.25厦酬,

  19. setLetterSpacing(float letterSpacing)
    設(shè)置行的間距,默認(rèn)值是0瘫想,負(fù)值行間距會(huì)收縮

  20. setFontFeatureSettings(String settings)
    設(shè)置字體樣式仗阅,可以設(shè)置CSS樣式

  21. 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)度

  22. 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)度的顯示

  23. 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中

  24. 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中

  25. getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds)
    得到文本的邊界饮戳,上下左右豪治,提取到bounds中,可以通過(guò)這計(jì)算文本的寬和高

  26. 參考

Canvas

  1. translate(100, 50) 平移
    參數(shù)1: 向X軸方向移動(dòng)100距離
    參數(shù)2: 向Y軸方向移動(dòng)50距離

  2. 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)

  3. 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)角度

  4. 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ì)象

  5. canvas.drawCircle(200, 200, 100, p) 畫圓
    參數(shù)1:圓心X
    參數(shù)2:圓心Y
    參數(shù)3:半徑R
    參數(shù)4:畫筆對(duì)象

  6. 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ì)象

  7. 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 bottom

  8. canvas.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ì)象

  9. 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半徑

  10. 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);

  11. 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);//畫出貝塞爾曲線

  12. 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è)的值匣椰,忽略。

  13. 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)

  14. 參考

Path

  1. 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)位置。

  2. 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);

  3. 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);

  4. 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);

  5. 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);

  6. 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);

  7. 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);

  8. 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);

  9. 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);

  10. 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);

  11. 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);

  12. 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凳干,一起剝皮案震驚了整個(gè)濱河市晴裹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌救赐,老刑警劉巖涧团,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異经磅,居然都是意外死亡泌绣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門预厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阿迈,“玉大人,你說(shuō)我怎么就攤上這事轧叽》绿希” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵犹芹,是天一觀的道長(zhǎng)崎页。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腰埂,這世上最難降的妖魔是什么飒焦? 我笑而不...
    開(kāi)封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮屿笼,結(jié)果婚禮上牺荠,老公的妹妹穿的比我還像新娘。我一直安慰自己驴一,他們只是感情好休雌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肝断,像睡著了一般杈曲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胸懈,一...
    開(kāi)封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天担扑,我揣著相機(jī)與錄音,去河邊找鬼趣钱。 笑死涌献,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的首有。 我是一名探鬼主播燕垃,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼枢劝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卜壕?” 一聲冷哼從身側(cè)響起呈野,我...
    開(kāi)封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎印叁,沒(méi)想到半個(gè)月后被冒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轮蜕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年昨悼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跃洛。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡率触,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汇竭,到底是詐尸還是另有隱情葱蝗,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布细燎,位于F島的核電站两曼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玻驻。R本人自食惡果不足惜悼凑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璧瞬。 院中可真熱鬧户辫,春花似錦、人聲如沸嗤锉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘟忱。三九已至奥额,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酷誓,已是汗流浹背披坏。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盐数,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓伞梯,卻偏偏與公主長(zhǎng)得像玫氢,于是被迫代替她去往敵國(guó)和親帚屉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354