利用Android畫圓弧canvas.drawArc()實(shí)例詳解
前言
在學(xué)習(xí)android中圖形圖像處理技術(shù)這部分內(nèi)容時(shí),對(duì)繪制圓弧函數(shù)canvas.drawArc()的用法、參數(shù)含義及畫圖原理很是不理解,在網(wǎng)上搜索了一些,加上自己的理解,在此做個(gè)小總結(jié),下面來(lái)一起看看吧。
示例代碼
public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint) { drawArc(oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle, useCenter, paint); }
要實(shí)現(xiàn)這個(gè)方法,我們要傳5個(gè)參數(shù)進(jìn)去。
第一個(gè)參數(shù):RectF oval
oval 參數(shù)的作用是:定義的圓弧的形狀和大小的范圍
/** * 這是一個(gè)居中的圓 */ float x = (getWidth() - getHeight() / 2) / 2; float y = getHeight() / 4; RectF oval = new RectF( x, y, getWidth() - x, getHeight() - y);
第二個(gè)參數(shù):float startAngle
這個(gè)參數(shù)的作用是設(shè)置圓弧是從哪個(gè)角度來(lái)順時(shí)針繪畫的
canvas.drawArc(oval,-90,120,false,mPaint);
canvas.drawArc(oval,90,110,false,mPaint);
//設(shè)置為-180的時(shí)候也是這樣 canvas.drawArc(oval,180,140,false,mPaint);
//設(shè)置為360的時(shí)候也是這樣 canvas.drawArc(oval,0,140,false,mPaint);
第三個(gè)參數(shù):float sweepAngle
這個(gè)參數(shù)的作用是設(shè)置圓弧掃過(guò)的角度
我們從上面的代碼就可以知道其中的作用了
第四個(gè)參數(shù):boolean useCenter
這個(gè)參數(shù)的作用是設(shè)置我們的圓弧在繪畫的時(shí)候,是否經(jīng)過(guò)圓形
值得注意的是,這個(gè)參數(shù)在我們的 mPaint.setStyle(Paint.Style.STROKE);
設(shè)置為描邊屬性的時(shí)候,是看不出效果的。
/** *這里我是偷懶了,建議不要在onDraw()方法里初始化對(duì)象 */ Paint p = new Paint();//這個(gè)是畫矩形的畫筆,方便大家理解這個(gè)圓弧 p.setStyle(Paint.Style.STROKE); p.setColor(Color.RED); mPaint.setAntiAlias(true);//取消鋸齒 mPaint.setStyle(Paint.Style.FILL);//設(shè)置畫圓弧的畫筆的屬性為描邊(空心),個(gè)人喜歡叫它描邊,叫空心有點(diǎn)會(huì)引起歧義 mPaint.setStrokeWidth(mCircleWidth); mPaint.setColor(Color.CYAN); /** * 這是一個(gè)居中的圓 */ float x = (getWidth() - getHeight() / 2) / 2; float y = getHeight() / 4; RectF oval = new RectF( x, y, getWidth() - x, getHeight() - y); canvas.drawArc(oval,360,140,false,mPaint);//畫圓弧,這個(gè)時(shí)候,繪制沒(méi)有經(jīng)過(guò)圓心 canvas.drawRect(oval, p);//畫矩形
//當(dāng)我們?cè)O(shè)置為true的時(shí)候,繪制的時(shí)候就經(jīng)過(guò)圓心了 canvas.drawArc(oval,360,140,true,mPaint);
第五個(gè)參數(shù):Paint paint
這個(gè)參數(shù)的作用是設(shè)置我們的畫筆對(duì)象的屬性
//當(dāng)我們?cè)O(shè)置為true的時(shí)候,繪制的時(shí)候就經(jīng)過(guò)圓心了 canvas.drawArc(oval,360,140,true,mPaint);
這里還是要強(qiáng)調(diào)一下,當(dāng) p.setStyle(Paint.Style.STROKE)
的時(shí)候,我們的第四個(gè)參數(shù)boolean useCenter
,是看不到效果的。
下面是代碼全文
public class CustomProgress extends View{ private Paint mPaint; /** * 圓的寬度 */ private int mCircleWidth = 3; public CustomProgress(Context context) { this(context, null); } public CustomProgress(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomProgress(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { mPaint.setAntiAlias(true);//取消鋸齒 mPaint.setStyle(Paint.Style.FILL); mPaint.setStrokeWidth(mCircleWidth); mPaint.setColor(Color.CYAN); /** * 這是一個(gè)居中的圓 */ float x = (getWidth() - getHeight() / 2) / 2; float y = getHeight() / 4; RectF oval = new RectF( x, y, getWidth() - x, getHeight() - y); canvas.drawArc(oval,360,140,true,mPaint); } }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android使用Notification實(shí)現(xiàn)通知功能
這篇文章主要為大家詳細(xì)介紹了Android使用Notification實(shí)現(xiàn)通知功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Android 6.0權(quán)限申請(qǐng)?jiān)斀饧皺?quán)限資料整理
這篇文章主要介紹了Android 6.0權(quán)限申請(qǐng)?jiān)斀饧皺?quán)限資料整理的相關(guān)資料,需要的朋友可以參考下2016-10-10Android BroadcastReceiver廣播注冊(cè)方式總結(jié)
這篇文章主要介紹了Android BroadcastReceiver廣播注冊(cè)方式總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-01-01Android自定義一個(gè)屬于自己的時(shí)間鐘表操作方法
本文主要講解的是如何自定義一個(gè)時(shí)間鐘表,通過(guò)簡(jiǎn)單的練習(xí)可以簡(jiǎn)單學(xué)習(xí)android當(dāng)中自定義view的一些常用繪圖技巧,優(yōu)化android繪圖操作,感興趣的朋友跟隨小編一起看看吧2024-08-08Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能示例
這篇文章主要介紹了Android開(kāi)發(fā)使用Drawable繪制圓角與圓形圖案功能,結(jié)合具體實(shí)例形式分析了Drawable繪制圓角矩形的實(shí)現(xiàn)步驟與使用方法,需要的朋友可以參考下2017-10-10Android Studio連接手機(jī)設(shè)備教程
這篇文章主要為大家詳細(xì)介紹了Android Studio連接手機(jī)設(shè)備教程,非常完整的連接步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android Activity 與Service進(jìn)行數(shù)據(jù)交互詳解
這篇文章主要介紹了Android Activity 與Service進(jìn)行數(shù)據(jù)交互的相關(guān)資料,在開(kāi)發(fā)Android App的時(shí)候經(jīng)常會(huì)使用這樣的功能,需要的朋友可以參考下2016-10-10android 加載本地聯(lián)系人實(shí)現(xiàn)方法
在android開(kāi)發(fā)過(guò)程中,有些功能需要訪問(wèn)本地聯(lián)系人列表,本人搜集整理了一番,拿出來(lái)和大家分享一下,希望可以幫助你們2012-12-12