Android学习笔记(三):android画图之paint
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
? ?* Paint類介紹 ?
???? *? ?
???? * Paint即畫筆,在繪圖過程中起到了極其重要的作用,畫筆主要保存了顏色, ?
???? * 樣式等繪制信息,指定了如何繪制文本和圖形,畫筆對象有很多設(shè)置方法, ?
???? * 大體上可以分為兩類,一類與圖形繪制相關(guān),一類與文本繪制相關(guān)。??????? ?
???? *? ?
???? * 1.圖形繪制 ?
???? * setARGB(int a,int r,int g,int b); ?
???? * 設(shè)置繪制的顏色,a代表透明度,r,g,b代表顏色值。 ?
???? *? ?
???? * setAlpha(int a); ?
???? * 設(shè)置繪制圖形的透明度。 ?
???? *? ?
???? * setColor(int color); ?
???? * 設(shè)置繪制的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。 ?
???? *? ?
??? * setAntiAlias(boolean aa); ?
???? * 設(shè)置是否使用抗鋸齒功能,會消耗較大資源,繪制圖形速度會變慢。 ?
???? *? ?
???? * setDither(boolean dither); ?
???? * 設(shè)定是否使用圖像抖動處理,會使繪制出來的圖片顏色更加平滑和飽滿,圖像更加清晰 ?
???? *? ?
???? * setFilterBitmap(boolean filter); ?
???? * 如果該項設(shè)置為true,則圖像在動畫進行中會濾掉對Bitmap圖像的優(yōu)化操作,加快顯示 ?
???? * 速度,本設(shè)置項依賴于dither和xfermode的設(shè)置 ?
???? *? ?
???? * setMaskFilter(MaskFilter maskfilter); ?
???? * 設(shè)置MaskFilter,可以用不同的MaskFilter實現(xiàn)濾鏡的效果,如濾化,立體等?????? *? ?
???? * setColorFilter(ColorFilter colorfilter); ?
???? * 設(shè)置顏色過濾器,可以在繪制顏色時實現(xiàn)不用顏色的變換效果 ?
???? *? ?
???? * setPathEffect(PathEffect effect); ?
???? * 設(shè)置繪制路徑的效果,如點畫線等 ?
???? *? ?
???? * setShader(Shader shader); ?
???? * 設(shè)置圖像效果,使用Shader可以繪制出各種漸變效果 ?
???? * ?
???? * setShadowLayer(float radius ,float dx,float dy,int color); ?
???? * 在圖形下面設(shè)置陰影層,產(chǎn)生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色 ?
???? *? ?
???? * setStyle(Paint.Style style); ?
???? * 設(shè)置畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE ?
???? *? ?
???? * setStrokeCap(Paint.Cap cap); ?
???? * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設(shè)置筆刷的圖形樣式,如圓形樣式 ?
???? * Cap.ROUND,或方形樣式Cap.SQUARE ?
???? *? ?
???? * setSrokeJoin(Paint.Join join); ?
???? * 設(shè)置繪制時各圖形的結(jié)合方式,如平滑效果等 ?
???? *? ?
???? * setStrokeWidth(float width); ?
???? * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設(shè)置筆刷的粗細度 ?
???? *? ?
???? * setXfermode(Xfermode xfermode); ?
???? * 設(shè)置圖形重疊時的處理方式,如合并,取交集或并集,經(jīng)常用來制作橡皮的擦除效果 ?
???? *? ?
???? * 2.文本繪制 ?
???? * setFakeBoldText(boolean fakeBoldText); ?
???? * 模擬實現(xiàn)粗體文字,設(shè)置在小字體上效果會非常差 ?
???? *? ?
???? * setSubpixelText(boolean subpixelText); ?
???? * 設(shè)置該項為true,將有助于文本在LCD屏幕上的顯示效果 ?
???? *? ?
???? * setTextAlign(Paint.Align align); ?
???? * 設(shè)置繪制文字的對齊方向 ?
???? *? ?
?? * setTextScaleX(float scaleX); ?
??? * 設(shè)置繪制文字x軸的縮放比例,可以實現(xiàn)文字的拉伸的效果 ?
???? *? ?
???? * setTextSize(float textSize); ?
???? * 設(shè)置繪制文字的字號大小 ?
???? *? ?
???? * setTextSkewX(float skewX); ?
???? * 設(shè)置斜體文字,skewX為傾斜弧度 ?
???? *? ?
???? * setTypeface(Typeface typeface); ?
???? * 設(shè)置Typeface對象,即字體風格,包括粗體,斜體以及襯線體,非襯線體等 ?
???? *? ?
???? * setUnderlineText(boolean underlineText); ?
???? * 設(shè)置帶有下劃線的文字效果 ?
???? *? ?
???? * setStrikeThruText(boolean strikeThruText); ?
???? * 設(shè)置帶有刪除線的效果 ?
???? *? ?
????
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | private class MyView2 extends View { ??? ???????? public MyView2(Context context) { ??? ???????????? super (context); ??? ???????? } ??? ???????? @Override ???????? protected void onDraw(Canvas canvas) ??? ???????? { ??? ???????????? super .onDraw(canvas); ??? ???????????? canvas.drawColor(Color.WHITE); ??? ???????????? Paint paint = new Paint(); ??? ???????????? paint.setAntiAlias( true ); ??? ???????????? paint.setColor(Color.RED); ??? ???????????? paint.setStyle(Paint.Style.STROKE); //設(shè)置為空心 ??? ???????????? paint.setStrokeWidth(3); ??? ???????????? canvas.drawCircle(40, 40, 30, paint); ??? ???????????? canvas.drawRect(10, 90, 70, 150, paint); ??? ???????????? canvas.drawRect(10, 170, 70, 200, paint); ??? ???????????? canvas.drawOval( new RectF(10, 220, 70, 250), paint); ??? ???????????? Path path = new Path(); //三角形 ??? ???????????? path.moveTo(10, 330); ??? ???????????? path.lineTo(70, 330); ??? ???????????? path.lineTo(40, 270); ??? ???????????? path.close(); ??? ???????????? canvas.drawPath(path, paint); ??? ???????????? Path path1 = new Path(); //梯形 ??? ???????????? path1.moveTo(10, 410); //繪畫基點 ??? ???????????? path1.lineTo(70, 410); ??? ???????????? path1.lineTo(55, 350); ??? ???????????? path1.lineTo(25, 350); ??? ???????????? path1.close(); //把開始的點和最后的點連接在一起,構(gòu)成一個封閉圖形 ???????????? /* ????????????? * 最重要的就是movtTo和close,如果是Style.FILL的話,不設(shè)置close,也沒有區(qū)別,可是如果是STROKE模式, ????????????? * 如果不設(shè)置close,圖形不封閉。 ????????????? * ????????????? * 當然,你也可以不設(shè)置close,再添加一條線,效果一樣。 ????????????? */ ???????????? canvas.drawPath(path1, paint); ??????????????? ??????????????? ??????????????? ??????????????? ???????????? ///第二列 ??? ???????????? paint.setColor(Color.BLUE); ??? ???????????? paint.setStyle(Paint.Style.FILL); //設(shè)置實心 ??? ???????????? canvas.drawCircle(120, 40, 30, paint); ??? ???????????? canvas.drawRect(90, 90, 150, 150, paint); ??? ???????????? canvas.drawRect(90, 170, 150, 200, paint); ??? ???????????? RectF re2 = new RectF(90, 220, 150, 250); ??? ???????????? canvas.drawOval(re2, paint); ??? ???????????? Path path2 = new Path(); ??? ???????????? path2.moveTo(90, 330); ??? ???????????? path2.lineTo(150, 330); ??? ???????????? path2.lineTo(120, 270); ??? ???????????? path2.close(); ??? ???????????? canvas.drawPath(path2, paint); ??? ???????????? Path path3 = new Path(); ??? ???????????? path3.moveTo(90, 410); ??? ???????????? path3.lineTo(150, 410); ??? ???????????? path3.lineTo(135, 350); ??? ???????????? path3.lineTo(105, 350); ??? ???????????? path3.close(); ??? ???????????? canvas.drawPath(path3, paint); ??????????????? ??????????????? ???????????? 第三列 ??????????????? ???????????? /* ????????????? * LinearGradient shader = new LinearGradient(0, 0, endX, endY, new ????????????? * int[]{startColor, midleColor, endColor},new float[]{0 , 0.5f, ????????????? * 1.0f}, TileMode.MIRROR); ????????????? * 參數(shù)一為漸變起初點坐標x位置,參數(shù)二為y軸位置,參數(shù)三和四分辨對應(yīng)漸變終點 ????????????? * 其中參數(shù)new int[]{startColor, midleColor,endColor}是參與漸變效果的顏色集合, ????????????? * 其中參數(shù)new float[]{0 , 0.5f, 1.0f}是定義每個顏色處于的漸變相對位置, 這個參數(shù)可以為null,如果為null表示所有的顏色按順序均勻的分布 ????????????? */ ???????????? Shader mShader = new LinearGradient(0, 0, 100, 100, ??? ???????????? new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }, ??? ???????????? null , Shader.TileMode.REPEAT); ??? ???????????? // Shader.TileMode三種模式 ??? ???????????? // REPEAT:沿著漸變方向循環(huán)重復(fù) ??? ???????????? // CLAMP:如果在預(yù)先定義的范圍外畫的話,就重復(fù)邊界的顏色 ??? ???????????? // MIRROR:與REPEAT一樣都是循環(huán)重復(fù),但這個會對稱重復(fù) ??? ???????????? paint.setShader(mShader); // 用Shader中定義定義的顏色來話 ??? ???????????? canvas.drawCircle(200, 40, 30, paint); ??? ???????????? canvas.drawRect(170, 90, 230, 150, paint); ??? ???????????? canvas.drawRect(170, 170, 230, 200, paint); ??? ???????????? RectF re3 = new RectF(170, 220, 230, 250); ??? ???????????? canvas.drawOval(re3, paint); ??? ???????????? Path path4 = new Path(); ??? ???????????? path4.moveTo(170, 330); ??? ???????????? path4.lineTo(230, 330); ??? ???????????? path4.lineTo(200, 270); ??? ???????????? path4.close(); ??? ???????????? canvas.drawPath(path4, paint); ??? ???????????? Path path5 = new Path(); ??? ???????????? path5.moveTo(170, 410); ??? ???????????? path5.lineTo(230, 410); ??? ???????????? path5.lineTo(215, 350); ??? ???????????? path5.lineTo(185, 350); ??? ???????????? path5.close(); ??? ???????????? canvas.drawPath(path5, paint); ??????????????? ???????????? //第4列 ??? ???????????? paint.setTextSize(24); ??? ???????????? canvas.drawText( "圓形" , 240, 50, paint); ??? ???????????? canvas.drawText( "正方形" , 240, 120, paint); ??? ???????????? canvas.drawText( "長方形" , 240, 190, paint); ??? ???????????? canvas.drawText( "橢圓形" , 240, 250, paint); ??? ???????????? canvas.drawText( "三角形" , 240, 320, paint); ??? ???????????? canvas.drawText( "梯形" , 240, 390, paint); ??? ???????? } ??? ???? } |
注:文章內(nèi)容來源網(wǎng)上
轉(zhuǎn)載于:https://my.oschina.net/yolinfeng/blog/408090
總結(jié)
以上是生活随笔為你收集整理的Android学习笔记(三):android画图之paint的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 子查询优化一例
- 下一篇: centos中文乱码修改字符编码使用ce