Android学习笔记(三):android画图之paint
2019獨角獸企業重金招聘Python工程師標準>>>
? ?* Paint類介紹 ?
???? *? ?
???? * Paint即畫筆,在繪圖過程中起到了極其重要的作用,畫筆主要保存了顏色, ?
???? * 樣式等繪制信息,指定了如何繪制文本和圖形,畫筆對象有很多設置方法, ?
???? * 大體上可以分為兩類,一類與圖形繪制相關,一類與文本繪制相關。??????? ?
???? *? ?
???? * 1.圖形繪制 ?
???? * setARGB(int a,int r,int g,int b); ?
???? * 設置繪制的顏色,a代表透明度,r,g,b代表顏色值。 ?
???? *? ?
???? * setAlpha(int a); ?
???? * 設置繪制圖形的透明度。 ?
???? *? ?
???? * setColor(int color); ?
???? * 設置繪制的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。 ?
???? *? ?
??? * setAntiAlias(boolean aa); ?
???? * 設置是否使用抗鋸齒功能,會消耗較大資源,繪制圖形速度會變慢。 ?
???? *? ?
???? * setDither(boolean dither); ?
???? * 設定是否使用圖像抖動處理,會使繪制出來的圖片顏色更加平滑和飽滿,圖像更加清晰 ?
???? *? ?
???? * setFilterBitmap(boolean filter); ?
???? * 如果該項設置為true,則圖像在動畫進行中會濾掉對Bitmap圖像的優化操作,加快顯示 ?
???? * 速度,本設置項依賴于dither和xfermode的設置 ?
???? *? ?
???? * setMaskFilter(MaskFilter maskfilter); ?
???? * 設置MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等?????? *? ?
???? * setColorFilter(ColorFilter colorfilter); ?
???? * 設置顏色過濾器,可以在繪制顏色時實現不用顏色的變換效果 ?
???? *? ?
???? * setPathEffect(PathEffect effect); ?
???? * 設置繪制路徑的效果,如點畫線等 ?
???? *? ?
???? * setShader(Shader shader); ?
???? * 設置圖像效果,使用Shader可以繪制出各種漸變效果 ?
???? * ?
???? * setShadowLayer(float radius ,float dx,float dy,int color); ?
???? * 在圖形下面設置陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色 ?
???? *? ?
???? * setStyle(Paint.Style style); ?
???? * 設置畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE ?
???? *? ?
???? * setStrokeCap(Paint.Cap cap); ?
???? * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式,如圓形樣式 ?
???? * Cap.ROUND,或方形樣式Cap.SQUARE ?
???? *? ?
???? * setSrokeJoin(Paint.Join join); ?
???? * 設置繪制時各圖形的結合方式,如平滑效果等 ?
???? *? ?
???? * setStrokeWidth(float width); ?
???? * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的粗細度 ?
???? *? ?
???? * setXfermode(Xfermode xfermode); ?
???? * 設置圖形重疊時的處理方式,如合并,取交集或并集,經常用來制作橡皮的擦除效果 ?
???? *? ?
???? * 2.文本繪制 ?
???? * setFakeBoldText(boolean fakeBoldText); ?
???? * 模擬實現粗體文字,設置在小字體上效果會非常差 ?
???? *? ?
???? * setSubpixelText(boolean subpixelText); ?
???? * 設置該項為true,將有助于文本在LCD屏幕上的顯示效果 ?
???? *? ?
???? * setTextAlign(Paint.Align align); ?
???? * 設置繪制文字的對齊方向 ?
???? *? ?
?? * setTextScaleX(float scaleX); ?
??? * 設置繪制文字x軸的縮放比例,可以實現文字的拉伸的效果 ?
???? *? ?
???? * setTextSize(float textSize); ?
???? * 設置繪制文字的字號大小 ?
???? *? ?
???? * setTextSkewX(float skewX); ?
???? * 設置斜體文字,skewX為傾斜弧度 ?
???? *? ?
???? * setTypeface(Typeface typeface); ?
???? * 設置Typeface對象,即字體風格,包括粗體,斜體以及襯線體,非襯線體等 ?
???? *? ?
???? * setUnderlineText(boolean underlineText); ?
???? * 設置帶有下劃線的文字效果 ?
???? *? ?
???? * setStrikeThruText(boolean strikeThruText); ?
???? * 設置帶有刪除線的效果 ?
???? *? ?
????
| 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); //設置為空心 ??? ???????????? 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(); //把開始的點和最后的點連接在一起,構成一個封閉圖形 ???????????? /* ????????????? * 最重要的就是movtTo和close,如果是Style.FILL的話,不設置close,也沒有區別,可是如果是STROKE模式, ????????????? * 如果不設置close,圖形不封閉。 ????????????? * ????????????? * 當然,你也可以不設置close,再添加一條線,效果一樣。 ????????????? */ ???????????? canvas.drawPath(path1, paint); ??????????????? ??????????????? ??????????????? ??????????????? ???????????? ///第二列 ??? ???????????? paint.setColor(Color.BLUE); ??? ???????????? paint.setStyle(Paint.Style.FILL); //設置實心 ??? ???????????? 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); ????????????? * 參數一為漸變起初點坐標x位置,參數二為y軸位置,參數三和四分辨對應漸變終點 ????????????? * 其中參數new int[]{startColor, midleColor,endColor}是參與漸變效果的顏色集合, ????????????? * 其中參數new float[]{0 , 0.5f, 1.0f}是定義每個顏色處于的漸變相對位置, 這個參數可以為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:沿著漸變方向循環重復 ??? ???????????? // CLAMP:如果在預先定義的范圍外畫的話,就重復邊界的顏色 ??? ???????????? // MIRROR:與REPEAT一樣都是循環重復,但這個會對稱重復 ??? ???????????? 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); ??? ???????? } ??? ???? } |
注:文章內容來源網上
轉載于:https://my.oschina.net/yolinfeng/blog/408090
總結
以上是生活随笔為你收集整理的Android学习笔记(三):android画图之paint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 子查询优化一例
- 下一篇: centos中文乱码修改字符编码使用ce