日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android自定义控件前导基础知识学习(一)——Canvas

發布時間:2025/3/20 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android自定义控件前导基础知识学习(一)——Canvas 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述:

? ? 我們時常會遇到一些需要利用畫圖來實現的功能。例如一些常見的幾何圖形——點、直線、弧、圓、橢圓、文字、矩形、多邊形、曲線、圓角矩形,總不能遇到 一個幾何圖形就用圖片來代替吧。這樣我們的手機肯定會吃不消。就算我們現在能夠使用一些少量圖片能夠來解決當前的一些問題,可是對于那些“變化多端”的需求來說,這些手段根本不值一提。對此,我們可以利用Canvas畫圖技術來解決。下面就讓我們一起來解開Canvas的神秘面紗吧。


示例編程:

1.繪制圓形

首先看一下效果圖展示:


實現關鍵代碼:

private void drawCirle(Canvas canvas) {canvas.drawCircle(500, 500, 200, paint);}

2.繪制弧線區域

效果圖展示:


實現關鍵代碼:

private void drawCuttingCirle(Canvas canvas) {RectF rect = new RectF(0, 0, 400, 400);canvas.drawArc(rect, // 弧線所使用的矩形區域大小0, // 開始角度90, // 掃過的角度false, // 是否使用中心paint);}


3.繪制1/4圓

效果圖展示:


實現關鍵代碼:

private void drawQuarterCirle(Canvas canvas) {RectF rect = new RectF(0, 0, 300, 300);canvas.drawArc(rect, // 弧線所使用的矩形區域大小0, // 開始角度90, // 掃過的角度true, // 是否使用中心paint);}

4.繪制直線

效果圖展示:


實現關鍵代碼:

private void drawLine(Canvas canvas) {canvas.drawLine(10, 10, 800, 1000, paint);}

5.繪制橢圓

效果圖展示:


實現關鍵代碼:

private void drawOval(Canvas canvas) {// 定義一個矩形區域RectF oval = new RectF(10, 5, 600, 900);// 矩形區域內切橢圓canvas.drawOval(oval, paint);}


6.繪制矩形

效果圖展示:


實現關鍵代碼:

private void drawRect(Canvas canvas) {RectF rect = new RectF(50, 50, 200, 200);canvas.drawRect(rect, paint);}

7.繪制圓角矩形

效果圖展示:


實現關鍵代碼:

private void drawSmoothRect(Canvas canvas) {RectF rect = new RectF(50, 50, 200, 200);canvas.drawRoundRect(rect, 30, // x軸的半徑30, // y軸的半徑paint);}

8.繪制多邊形

效果圖展示:


實現關鍵代碼:

private void drawPolygon(Canvas canvas) {Path path = new Path(); // 定義一條路徑path.moveTo(10, 10); // 移動到 坐標10,10path.lineTo(150, 1360);path.lineTo(960, 720);path.lineTo(500, 180);path.lineTo(10, 10);canvas.drawPath(path, paint);}

9.繪制羅盤

效果圖展示:


實現關鍵代碼:

private void drawCompass(Canvas canvas) {paint.setAntiAlias(true);paint.setStyle(Style.STROKE);canvas.translate(canvas.getWidth() / 2, 500); // 平移羅盤canvas.drawCircle(0, 0, 200, paint); // 畫圓圈// 使用path繪制路徑文字canvas.save();canvas.translate(-155, -155);Path path = new Path();path.addArc(new RectF(0, 0, 300, 300), -180, 180);Paint citePaint = new Paint(paint);citePaint.setTextSize(30);citePaint.setStrokeWidth(1);canvas.drawTextOnPath("http://blog.csdn.net/lemon_tree", path, 35, 0, citePaint);canvas.restore();Paint tmpPaint = new Paint(paint); // 小刻度畫筆對象tmpPaint.setStrokeWidth(2);tmpPaint.setTextSize(30);float y = 200;int count = 60; // 總刻度數for (int i = 0; i < count; i++) {if (i % 5 == 0) {canvas.drawLine(0f, y, 0, y + 20f, paint);canvas.drawText(String.valueOf(i / 5 + 1), -4f, y + 55f, tmpPaint);} else {canvas.drawLine(0f, y, 0f, y + 15f, tmpPaint);}canvas.rotate(360 / count, 0f, 0f); // 旋轉畫紙}// 繪制指針tmpPaint.setColor(Color.GRAY);tmpPaint.setStrokeWidth(4);canvas.drawCircle(0, 0, 20, tmpPaint);tmpPaint.setStyle(Style.FILL);tmpPaint.setColor(Color.YELLOW);canvas.drawCircle(0, 0, 5, tmpPaint);canvas.drawLine(0, 30, 0, -135, paint);} 以上的代碼中,我不知道大家看上去會不會感覺有一點亂,不過沒關系,在下一篇博客中我會對這一塊單獨拿出來說一下。以自定義一個動態時鐘為例詳細說明這部分的內容,大家稍安勿躁。大家可以參看《Android UI編程進階——使用SurfaceViewt和Canvas實現動態時鐘》進行學習。


10.記錄手指運動的路徑

效果圖展示:


實現關鍵代碼:

這一部分的功能實現主要就是考慮三個部分:記錄路徑(這里單獨拿一個變量來保存的原因是因為畫圖的時候會有一個重繪的過程,也就需要擦除后重繪,如果不保存以前的路徑,這樣就可能導致以前的路徑不見了)、記錄事件、繪制。

獲得記錄的路徑:

private ArrayList<PointF> graphics = new ArrayList<PointF>();觸摸事件:

public boolean onTouchEvent(MotionEvent event) {graphics.add(new PointF(event.getX(), event.getY()));invalidate(); // 重新繪制區域return true;}繪制:

private void drawFingerPath(Canvas canvas) {for (PointF point : graphics) {canvas.drawPoint(point.x, point.y, paint);}}

源碼下載:

(注:源碼中除了Canvas使用集合的示范外還有畫曲線、正/余弦函數、SurfaceView的使用、心跳。PS:心跳示例需要點擊屏幕才能觸發)

http://download.csdn.net/detail/u013761665/8423823

總結

以上是生活随笔為你收集整理的Android自定义控件前导基础知识学习(一)——Canvas的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区精品久久 | 国产精品suv一区二区三区 | 国产精品人妻一区二区三区 | 人人插人人干 | 国产一级黄色录像 | 国产xxxx裸体xxx免费 | 亚洲综合站 | 国产鲁鲁视频在线观看特色 | 蜜臀久久99精品久久一区二区 | 欧美不卡一区 | 亚洲欧美激情另类校园 | 黄色的视频网站 | 欧美一区日韩一区 | 国产精品一级黄片 | 懂色一区二区 | 97超碰在| 成人性生交大片 | 高跟鞋丝袜猛烈xxxx | 蜜桃av成人 | 老妇女av | 成人看片| 欧美精品一区二区三 | 国产成人三级在线观看视频 | 右手影院亚洲欧美 | 国产一级片免费在线观看 | 成人性生活免费视频 | 欧美一级黄色网 | 激情伊人五月天 | 114国产精品久久免费观看 | 狠狠ri | 婷婷五月综合缴情在线视频 | 天天插天天射 | 亚洲国产精品久久久久久 | 麻豆久久久久久久 | av综合网站| 免费看欧美黄色片 | 免费的黄色的视频 | 久久综合久久鬼色 | mm131丰满少妇人体欣赏图 | 亚洲 欧美 变态 另类 综合 | 日本熟妇人妻xxxxx | 黄色男同视频 | 熟女高潮一区二区三区视频 | 色呦呦 | 国精产品一区二区三区 | www啪啪| 91看片看淫黄大片 | 日本人妻丰满熟妇久久久久久 | 日韩精品国产一区二区 | 亚洲免费av网 | 蜜乳av一区 | 香港台湾日本三级大全 | 亚州国产精品 | 大奶av| 国产又粗又长又黄的视频 | 亚洲a∨无码无在线观看 | 91免费国产在线观看 | 性欧美大战久久久久久久免费观看 | 特黄视频免费看 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 狠狠躁夜夜躁人人爽视频 | 福利社91 | 麻豆精品视频在线观看 | 日本少妇毛茸茸高潮 | 69影院在线观看 | 浪浪视频在线观看 | 亚洲国产精品一区二区三区 | 高潮疯狂过瘾粗话对白 | 亚洲毛片在线播放 | 日韩免费三级 | 狠狠干狠狠干狠狠干 | 国产无遮挡aaa片爽爽 | 欧美9999| 97精品人妻一区二区三区香蕉 | 中文字幕日本一区二区 | 日本欧美色| 午夜三级影院 | 一级毛片aa | 亚洲成人xxx | 久久久久欧美 | 在线国产黄色 | 一级作爱片 | 在线观看黄色免费网站 | 天堂影院一区二区 | 中文字幕有码在线播放 | 精品福利一区二区 | 久久久久久9999 | jizzz18| 欧美透逼视频 | 日韩免费网址 | 开心激情播播网 | 天天射网站 | 国产农村老头老太视频 | 亚洲av无码久久精品色欲 | 制服丝袜在线看 | 东方影库av | 69xxx免费视频 | 男男全肉变态重口高h | 久久无码视频一区 |