国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

利用Android畫圓弧canvas.drawArc()實(shí)例詳解

2019-12-12 01:36:56
字體:
供稿:網(wǎng)友

前言

在學(xué)習(xí)android中圖形圖像處理技術(shù)這部分內(nèi)容時(shí),對繪制圓弧函數(shù)canvas.drawArc()的用法、參數(shù)含義及畫圖原理很是不理解,在網(wǎng)上搜索了一些,加上自己的理解,在此做個(gè)小總結(jié),下面來一起看看吧。

示例代碼

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); 

oval 參數(shù)的作用是:定義的圓弧的形狀和大小的范圍第二個(gè)參數(shù):float startAngle

這個(gè)參數(shù)的作用是設(shè)置圓弧是從哪個(gè)角度來順時(shí)針繪畫的

canvas.drawArc(oval,-90,120,false,mPaint);

-90

canvas.drawArc(oval,90,110,false,mPaint);

90

//設(shè)置為-180的時(shí)候也是這樣canvas.drawArc(oval,180,140,false,mPaint);

180

//設(shè)置為360的時(shí)候也是這樣canvas.drawArc(oval,0,140,false,mPaint);

140

第三個(gè)參數(shù):float sweepAngle

這個(gè)參數(shù)的作用是設(shè)置圓弧掃過的角度

    我們從上面的代碼就可以知道其中的作用了

第四個(gè)參數(shù):boolean useCenter

這個(gè)參數(shù)的作用是設(shè)置我們的圓弧在繪畫的時(shí)候,是否經(jīng)過圓形 

值得注意的是,這個(gè)參數(shù)在我們的 mPaint.setStyle(Paint.Style.STROKE); 設(shè)置為描邊屬性的時(shí)候,是看不出效果的。

  /**  *這里我是偷懶了,建議不要在onDraw()方法里初始化對象  */  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)會引起歧義  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í)候,繪制沒有經(jīng)過圓心  canvas.drawRect(oval, p);//畫矩形

false

//當(dāng)我們設(shè)置為true的時(shí)候,繪制的時(shí)候就經(jīng)過圓心了canvas.drawArc(oval,360,140,true,mPaint);

true

第五個(gè)參數(shù):Paint paint

這個(gè)參數(shù)的作用是設(shè)置我們的畫筆對象的屬性

//當(dāng)我們設(shè)置為true的時(shí)候,繪制的時(shí)候就經(jīng)過圓心了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é)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。  

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎左旗| 塔河县| 南和县| 汝州市| 三门县| 拜泉县| 秭归县| 明水县| 洛宁县| 安乡县| 明溪县| 嘉兴市| 宁安市| 遵义县| 光山县| 永吉县| 洛浦县| 自贡市| 微山县| 屯门区| 资源县| 长海县| 开阳县| 浙江省| 岳池县| 乌拉特前旗| 泰安市| 青州市| 安多县| 清水河县| 武汉市| 弥勒县| 安岳县| 壤塘县| 莫力| 大名县| 乳源| 岐山县| 淮北市| 阿尔山市| 延长县|