亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

canvas和paint

2019-11-09 13:58:41
字體:
來源:轉載
供稿:網友

一個畫圖需要四大基本要素: 1、一個用來保存像素的Bitmap; 2、一個Canvas畫布,繪制Bitmap操作; 3、繪制的東西 4、繪制的畫筆Paint(顏色和樣式)

Canvas大致可以分為三類方法: 1. save、restore 等與層的保存和回滾相關的方法; 2. scale、rotate、clipXXX 等對畫布進行操作的方法; 3. drawXXX 等一系列繪畫相關的方法;

如何獲得一個Canvas對象。 Canvas對象的獲取方式有三種: 第一種我們通過重寫View.onDraw方法,View中的Canvas對象會被當做參數傳遞過來,我們操作這個Canvas,效果會直接反應在View中。 第二種就是當你想自己創建一個Canvas對象。從上面的基本要素可以明白,一個Canvas對象一定是結合了一個Bitmap對象的。所以一定要為一個Canvas對象設置一個Bitmap對象。

//得到一個Bitmap對象,當然也可以使用別的方式得到。但是要注意,改bitmap一定要是mutable(異變的) Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); /*先new一個Canvas對象,在調用setBitmap方法,一樣的效果 * Canvas c = new Canvas(); * c.setBitmap(b); */

第三種方式,是調用SurfaceHolder.lockCanvas(),返回一個Canvas對象。

1.Canvas 的左上角是(0,0); 2.基于左上角往右 X 為正,往下 Y 為正,反之為負; 3.移動單位為px

畫布的操作:畫圖坐標系的操作

canvas和顯示沒關系,只影響畫圖的坐標系。畫布的平移旋轉等操作,可以視為坐標系的操作。

//平移public void translate(float dx, float dy) {//畫布移動x、y的距離}//縮放public void scale(float sx, float sy) {//畫布x、y方向縮放倍率,使用默認基準點(原點 0,0)} public final void scale(float sx, float sy, float px, float py) {//畫布x、y方向縮放倍率,使用基準點(px,py)}//旋轉 public void rotate(float degrees) {//畫布旋轉角度,旋轉中心:畫布原點(0,0)}public final void rotate(float degrees, float px, float py) {//畫布旋轉角度,旋轉中心坐標(px,py)}

藍色的是手機屏幕邊框,紅色的是一個全屏的canvas

當canvas旋轉30度之后,其實成了這個樣子,但是你繪制的圖形還是只能在canvas內,并且坐標是按照canvas旋轉之前來的,也就是左上角坐標仍然是(0,0),右下角的坐標仍然是(width,height)。圖片永遠畫在canvas中的,圖片相對于canvas是沒有任何變化的。

canvas的繪制操作

1)填充 drawARGB(int a, int r, int g, int b) drawColor(int color) drawRGB(int r, int g, int b) drawColor(int color, PorterDuff.Mode mode) 2)幾何圖形

//弧,扇形public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint) {//弧所在矩形,起始角度,掃過角度(正方形:順時針),是否使用中心,畫筆}public void drawArc(float left, float top, float right, float bottom, float startAngle,float sweepAngle, boolean useCenter, @NonNull Paint paint) {//弧所在矩形的左上右下坐標,起始角度,掃過角度(正方形:順時針),是否使用中心,畫筆}//圓public void drawCircle(float cx, float cy, float radius, @NonNull Paint paint) {//圓心坐標,半徑,畫筆}//橢圓 public void drawOval(@NonNull RectF oval, @NonNull Paint paint) {//橢圓所在矩形,畫筆}public void drawOval(float left, float top, float right, float bottom, @NonNull Paint paint) {//橢圓所在矩形左上角右下角坐標,畫筆}//點public void drawPoint(float x, float y, @NonNull Paint paint) {//點的xy,畫筆}//矩形public void drawRect(@NonNull Rect r, @NonNull Paint paint) {//矩形,畫筆}public void drawRect(@NonNull RectF rect, @NonNull Paint paint) {//矩形(坐標為浮點型),畫筆}public void drawRect(float left, float top, float right, float bottom, @NonNull Paint paint) {//矩形左上右下坐標,畫筆}//圓角矩形public void drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint) {//圓角矩形所在矩形,x方向圓角半徑,y方向圓角半徑,畫筆}public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, @NonNull Paint paint) {//圓角矩形所在矩形的左上右下坐標,x方向圓角半徑,y方向圓角半徑,畫筆}//線public void drawLine(float startX, float startY, float stopX, float stopY,@NonNull Paint paint) {//線:起點坐標,終點坐標,畫筆}

3)圖片 canvas.drawBitmap (位圖) canvas.drawPicture (圖片) 4)文本

public void drawText(@NonNull CharSequence text, int start, int end, float x, float y,@NonNull Paint paint) {//文本,文本的截取(start,end),(x,y)默認文本的左下角,若設置mTextPaint.setTextAlign(Paint.Align.CENTER);則為文本的水平中心位置,畫筆}public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint) {//文本,(x,y)默認文本的左下角,若設置mTextPaint.setTextAlign(Paint.Align.CENTER);則為文本的水平中心位置,畫筆}

5、path

public void drawPath(@NonNull Path path, @NonNull Paint paint) {//path,畫筆}

Canvas的保存和回滾

在save到restore之間所畫的圖的操作,restore之后的代碼不受影響 。 save保存畫布,讓后續操作類似在新的圖層上操作一樣,restore類似合并圖層,讓save前的圖層與save后的圖層合并。

Paint類

reset() 重置畫筆 setColor(int color) 給畫筆設置顏色值 setARGB(int a, int r, int g, int b) 同樣是設置顏色,但是利用ARGB分開設置 setAlpha(int a) 設置畫筆透明度 setStyle(Paint.Style style) 設置畫筆樣式,取值有 Paint.Style.FILL :填充內部 Paint.Style.FILL_AND_STROKE :填充內部和描邊 Paint.Style.STROKE :僅描邊 setStrokeWidth(float width) 設置畫筆寬度 setAntiAlias(boolean aa) 設置畫筆是否抗鋸齒 左邊無抗鋸齒,右邊抗鋸齒 setDither() 該方法是設置防抖動。 無防抖 有防抖 setStrokeCap(Paint.Cap cap) 設置線帽樣式,取值有 Cap.ROUND(圓形線帽)、 Cap.SQUARE(方形線帽)、 Paint.Cap.BUTT(無線帽)

setStrokeJoin(Paint.Join join) 設置線段連接處樣式,參數取值有: Join.MITER(結合處為銳角) Join.Round(結合處為圓弧) Join.BEVEL(結合處為直線)

setShader(Shader shader) 設置漸變效果 設置圖像效果,使用Shader可以繪制出各種漸變效果; Shader下面有五個子類可用: BitmapShader :位圖圖像渲染 LinearGradient:線性渲染 RadialGradient:環形渲染 SweepGradient:掃描漸變渲染/梯度渲染 ComposeGradient:組合渲染,可以和其他幾個子類組合起來使用 這幾個類中LinearGradient、RadialGradient、SweepGradient均是可以將顏色進行處理,形成柔和的過渡,也可以稱為漸變,而BitmapShader 則是直接使用位圖進行渲染,就類似于貼圖,在貼圖的過程中根據需要自然就可以選擇相應的模式,有三種模式可供選擇,分別是: 枚舉: emun Shader.TileMode 定義了平鋪的3種模式: static final Shader.TileMode CLAMP: 邊緣拉伸,即使用邊緣的最后一個像素進行延展; static final Shader.TileMode MIRROR:在水平方向和垂直方向交替景象, 兩個相鄰圖像間沒有縫隙,從名稱上看就像照鏡子一樣; Static final Shader.TillMode REPETA:在水平方向和垂直方向重復擺放,兩個相鄰圖像間有縫隙縫隙;

setShadowLayer(float radius ,float dx,float dy,int color) 在圖形下面設置陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色

setColorFilter(ColorFilter filter) 設置顏色過濾器,可以通過顏色過濾器過濾掉對應的色值,比如去掉照片顏色,生成老照片效果;

setPathEffect(PathEffect effect); //設置繪制路徑的效果,如點畫線等,給path設置樣式(效果)

path類

Canvas沿著路徑繪制圖形,我們可以這樣來定義一條路徑:(1)構造一個Path對象;(2)調用Path的moveTo(x,y)方法設定路徑的起點;(3)調用lineTo(x,y)方法設定下一個點的位置。 (1)設置Path路徑效果:首先需要創建一個PathEffect子類對象,然后再調用Paint的setPathEffect(PathEffect p)方法即可。 (2)沿著路徑繪制文本:首先需要設定路徑的形狀,然后設置好畫筆并調用Canvas的drawPath(Path path,Paint paint)方法沿著路徑繪制圖形,最后調用Canvas的drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)方法繪制路徑文本,其中hOffset為相對于路徑起點距離的水平位置,hOffset為相對于路徑上或下距離。

moveTo(x,y): 不會進行繪制,只用于移動移動畫筆,確定起點坐標,與其他方法配合使用; lineTo(x,y): 一階貝塞爾曲線,坐標為終點坐標,配合moveTo方法用于進行直線繪制; quadTo (x1,y1,x2,y2): 二階貝塞爾曲線,(x1,y1) 為控制點,(x2,y2)為結束點,用于繪制圓滑的曲線; cubicTo(x1, y1, x2, y2, x3, y3): 三階貝塞爾曲線, (x1,y1) 為控制點,(x2,y2)為控制點,(x3,y3) 為結束點,用于繪制復雜的曲線。

參考

自定義控件三部曲之繪圖篇(七)——Paint之函數大匯總

Paint、Canvas、Matrix使用講解(一、Paint)

Android筆記二十八.Android繪圖深度解析


上一篇:CIFilter濾鏡

下一篇:js中對象繼承

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲永久在线观看| 欧美成人激情视频| 色诱女教师一区二区三区| 久久久久久久爱| 91欧美精品午夜性色福利在线| 午夜精品福利视频| 亚洲欧美日韩另类| 国产精品视频公开费视频| 高清日韩电视剧大全免费播放在线观看| 国产激情久久久久| 日韩在线视频中文字幕| 国产欧美一区二区三区在线看| 国产精品色悠悠| 最近2019好看的中文字幕免费| 欧美黄色片在线观看| 亚洲aⅴ男人的天堂在线观看| 久久影视电视剧免费网站清宫辞电视| 欧美最猛黑人xxxx黑人猛叫黄| 日韩电影免费在线观看| 亚洲综合av影视| 国产又爽又黄的激情精品视频| 日韩美女在线播放| 亚州成人av在线| 国产一区av在线| 久久躁日日躁aaaaxxxx| 91美女片黄在线观| 高清亚洲成在人网站天堂| 亚洲毛茸茸少妇高潮呻吟| 国产欧美日韩丝袜精品一区| 国产丝袜一区二区三区免费视频| 久久久国产在线视频| 欧美日韩在线看| 欧美高清在线视频观看不卡| 美女少妇精品视频| 国产精品亚发布| 亚洲国产高清高潮精品美女| 久国内精品在线| 国产精品精品视频| 国产一区二区黑人欧美xxxx| 日韩成人小视频| 777国产偷窥盗摄精品视频| 日韩精品视频免费专区在线播放| 日韩激情第一页| 国产精品jvid在线观看蜜臀| 日韩在线视频二区| 91中文字幕在线观看| 欧美视频免费在线观看| 国产精品高潮呻吟久久av无限| 91精品国产91| 深夜成人在线观看| 亲爱的老师9免费观看全集电视剧| 欧美激情网友自拍| 亚洲高清av在线| 欧美成人小视频| 欧美乱大交xxxxx| 欧美另类69精品久久久久9999| 欧美专区在线观看| 欧美激情精品久久久久久| 国产亚洲精品久久久| 欧美裸体xxxx极品少妇| 色综合久久久888| 68精品国产免费久久久久久婷婷| 97视频在线免费观看| 欧洲精品毛片网站| 成人免费高清完整版在线观看| 日韩免费精品视频| 国产有码一区二区| 97精品免费视频| wwwwwwww亚洲| 91精品国产综合久久香蕉922| 亚洲欧美国产日韩天堂区| 国产精品美女午夜av| 亚洲一级免费视频| 欧美日韩国产限制| 在线成人激情黄色| 国产不卡av在线| 亚洲国产美女久久久久| 岛国av一区二区三区| 成人综合国产精品| 91精品久久久久久久久中文字幕| 久久精品在线播放| 国产精品久久久久福利| 日韩中文字幕在线视频| 91精品中文在线| 国产成人亚洲综合青青| 日韩精品免费在线播放| 日韩欧美在线国产| 91久久精品国产91久久性色| 欧美亚洲另类激情另类| 国产又爽又黄的激情精品视频| 亚洲人成免费电影| 欧美色xxxx| 青青久久av北条麻妃海外网| 久久久久久久激情视频| 欧美亚洲第一页| 中文字幕亚洲第一| 亚洲欧美精品一区二区| 国产精品美女免费视频| 欧美噜噜久久久xxx| 久久99久久99精品中文字幕| 日韩电影大片中文字幕| 亚洲一级免费视频| 91九色综合久久| 亚洲精品国产精品自产a区红杏吧| 欧美电影在线播放| 91成人在线观看国产| 亚洲高清一二三区| 第一福利永久视频精品| 丝袜美腿亚洲一区二区| 欧美成人午夜视频| 精品国产一区二区三区久久久| 欧美激情小视频| 不卡在线观看电视剧完整版| 国产在线98福利播放视频| 国产亚洲在线播放| 成人久久久久爱| 国产一区二区三区精品久久久| 精品一区精品二区| 4p变态网欧美系列| 国产精品一区二区久久国产| 久久婷婷国产麻豆91天堂| 国产高清在线不卡| 亚洲免费高清视频| 亚洲欧美日韩第一区| 色老头一区二区三区在线观看| 久久影视电视剧免费网站清宫辞电视| 欧美日韩亚洲91| 亚洲2020天天堂在线观看| 久久69精品久久久久久国产越南| 色婷婷综合成人| 欧美日韩午夜视频在线观看| 久久在线视频在线| 91久久夜色精品国产网站| 国产精品久久久久77777| 亚洲精品www久久久久久广东| 亚洲欧美日韩直播| 亚洲色图15p| 亚洲韩国青草视频| 高清欧美电影在线| 国产欧亚日韩视频| www.欧美精品一二三区| 日韩精品视频三区| 亚洲精品免费网站| 久久久av亚洲男天堂| 久久精品欧美视频| 国内精品在线一区| 欧美在线视频免费| 国产情人节一区| 亚洲xxxx3d| 欧美肥老太性生活视频| 精品国产91乱高清在线观看| 久久精品国产久精国产一老狼| 久久久久99精品久久久久| 亚洲精品av在线| 一本色道久久88综合亚洲精品ⅰ| 91久久国产综合久久91精品网站| 国产亚洲精品美女久久久久| 欧美日韩一区二区在线播放| 欧美成人精品不卡视频在线观看| 国产精品成人一区二区| 亚洲成人亚洲激情| 久久综合九色九九| 亚洲精品www久久久久久广东| 欧美国产乱视频|