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

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

canvas和paint

2019-11-09 14:49:44
字體:
來源:轉載
供稿:網友

一個畫圖需要四大基本要素: 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繪圖深度解析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69久久夜色精品国产69乱青草| 黄色一区二区在线| 国产一区二区在线免费| 午夜精品国产精品大乳美女| 九九热精品视频在线播放| 欧美成人精品在线| 欧美二区乱c黑人| 性欧美暴力猛交69hd| 亚洲欧美日韩中文在线制服| 色悠悠国产精品| 性欧美亚洲xxxx乳在线观看| 欧美亚洲另类在线| 亚洲第一级黄色片| 亚洲自拍偷拍色片视频| 久久伊人精品一区二区三区| 国产精品专区h在线观看| 日韩欧美国产中文字幕| 欧美激情在线视频二区| 国产精品爱久久久久久久| 亚洲国产美女久久久久| 亚洲精品美女在线观看| 亚洲国产另类 国产精品国产免费| 国产精品久久久久秋霞鲁丝| 国产大片精品免费永久看nba| 久久久成人av| 欧美精品手机在线| 久久精品国产免费观看| 日韩av片电影专区| 国产97在线|亚洲| 久久久久久香蕉网| 永久免费看mv网站入口亚洲| 亚洲男人天堂网站| 国产精品你懂得| 欧美亚洲国产视频| 亚洲人成绝费网站色www| www.日韩不卡电影av| 日韩有码在线视频| 午夜精品99久久免费| 日韩视频一区在线| 26uuu日韩精品一区二区| 成人亚洲综合色就1024| 欧洲美女7788成人免费视频| 亚洲精品不卡在线| 亚洲精品有码在线| 国产一区香蕉久久| 欧美乱大交xxxxx| 欧美色视频日本高清在线观看| 国产成人久久久| 欧美日韩午夜剧场| 亚洲第一二三四五区| 日韩av免费看| 国产精品久久av| 亚洲色图国产精品| 亚洲夜晚福利在线观看| 最近的2019中文字幕免费一页| 2019国产精品自在线拍国产不卡| 成人久久久久久久| 国产精品成人一区二区三区吃奶| 欧美激情一区二区三级高清视频| 性欧美长视频免费观看不卡| 精品中文字幕视频| 中文字幕在线看视频国产欧美在线看完整| 欧美刺激性大交免费视频| 亚洲人成在线观看网站高清| 国产精品无av码在线观看| 亚洲人在线观看| 青草青草久热精品视频在线观看| 久久久影视精品| 狠狠色狠狠色综合日日小说| 欧美激情国产精品| 国产视频精品xxxx| 热门国产精品亚洲第一区在线| 国内精品一区二区三区四区| 日韩欧美有码在线| 亚洲精品资源美女情侣酒店| 91免费观看网站| 操日韩av在线电影| 岛国av一区二区在线在线观看| 国产精品成人免费视频| 一区二区三区在线播放欧美| 久久久久成人精品| 日本高清+成人网在线观看| 国产精品久久久久久久av大片| 欧美日韩一区二区精品| 日本亚洲精品在线观看| 国产精品久久在线观看| 亚洲人成亚洲人成在线观看| 欧美自拍大量在线观看| 91色琪琪电影亚洲精品久久| 91免费观看网站| 久久伊人精品视频| 国产精自产拍久久久久久蜜| 日本韩国在线不卡| 亚洲香蕉av在线一区二区三区| 欧美午夜影院在线视频| 一本色道久久综合狠狠躁篇怎么玩| 国产午夜精品理论片a级探花| 中文字幕在线看视频国产欧美| 亚洲欧洲黄色网| 亚洲高清在线观看| 欧美日韩色婷婷| 亚洲第一网站免费视频| 欧美日韩中文字幕在线视频| 成人激情视频小说免费下载| 国产一区二区香蕉| 中文字幕一区日韩电影| 欧美国产日产韩国视频| 韩国一区二区电影| 日韩欧美亚洲国产一区| 久久免费视频网| 欧美黄色免费网站| 另类视频在线观看| 菠萝蜜影院一区二区免费| 欧美中文字幕在线视频| 性色av一区二区三区免费| 国产欧美一区二区三区视频| 亚洲激情视频在线观看| 欧美超级乱淫片喷水| 国产精品视频久久久| 日韩中文有码在线视频| 国产不卡一区二区在线播放| 日韩精品在线影院| 北条麻妃一区二区三区中文字幕| 中文字幕精品久久| 欧美又大又硬又粗bbbbb| 欧美另类在线观看| 日韩亚洲第一页| 在线观看成人黄色| 97在线观看视频国产| 欧美影院久久久| 国产精品久久久久久久久男| 亚洲黄页网在线观看| 成人女保姆的销魂服务| 在线观看国产欧美| 久久久999国产| 欧美疯狂性受xxxxx另类| 亚洲电影免费观看| 好吊成人免视频| 免费99精品国产自在在线| 欧美电影第一页| 国产精品爽爽ⅴa在线观看| 最近免费中文字幕视频2019| 欧美理论在线观看| 精品电影在线观看| 国产精品手机播放| 亚洲欧美国产精品va在线观看| 色小说视频一区| 日日骚av一区| 久久久久国产一区二区三区| 日韩av在线免费播放| 色琪琪综合男人的天堂aⅴ视频| 亚洲成人激情小说| 成人福利免费观看| 亚洲一区二区三区四区在线播放| 中文欧美日本在线资源| 欧美激情a∨在线视频播放| 亚洲一区www| 欧美日韩一区二区在线| 中国人与牲禽动交精品| 久久久久北条麻妃免费看| 久久精品国产精品亚洲| 国产精品视频99| 久久香蕉国产线看观看网| 最新日韩中文字幕|