亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android自定義View弧線進度控件

 更新時間:2016年07月12日 11:56:19   作者:qq_25193681  
這篇文章主要為大家詳細介紹了Android自定義View弧線進度控件,點擊開始按鈕時,逐漸的出現(xiàn)進度,感興趣的小伙伴們可以參考一下

這個是一個以弧線為依托的進度控件,主要包括了兩個圓弧、一個圓、一個文本。

 

當我們點擊開始按鈕的時候,會出現(xiàn)一個動畫,逐漸的出現(xiàn)進度,好了,下面開始我們的編碼。

新建一個類,繼承自View,實現(xiàn)三個構(gòu)造方法,接著定義變量,初始化變量的數(shù)據(jù)。代碼如下:

private Paint mArcPaint, mCirclePaint, mTextPaint, mPaint;

 private float length;

 private float mRadius;

 private float mCircleXY;

 private float mSweepValue = 0;

 private String mShowText = "0%";

 private RectF mRectF;

 public MViewOne(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initView();
 }

 public MViewOne(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView();
 }

 public MViewOne(Context context) {
  super(context);
  initView();
 }

 private void initView() {
  mArcPaint = new Paint();
  mArcPaint.setStrokeWidth(50);
  mArcPaint.setAntiAlias(true);
  mArcPaint.setColor(Color.GREEN);
  mArcPaint.setStyle(Style.STROKE);

  mCirclePaint = new Paint();
  mCirclePaint.setColor(Color.GREEN);
  mCirclePaint.setAntiAlias(true);

  mTextPaint = new Paint();
  mTextPaint.setAntiAlias(true);
  mTextPaint.setColor(Color.RED);
  mTextPaint.setStrokeWidth(0);

  mPaint = new Paint();
  mPaint.setStrokeWidth(40);
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.YELLOW);
  mPaint.setStyle(Style.STROKE);


 }

可以看到,這里一共定義了四個畫筆,兩個畫弧形,一個畫文本,還有一個繪制圓。

在我們的onSizeChange方法里面,再給變量賦值。

 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  length = w;
  mCircleXY = length / 2;
  mRadius = (float) (length * 0.5 / 2);

 }

這時候,圓的半徑、圓的起繪點,都已經(jīng)有值了。

下面開始繪制

@Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  // 畫圓
  mRectF = new RectF((float) (length * 0.1), (float) (length * 0.1),
    (float) (length * 0.9), (float) (length * 0.9));
  canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
  // 畫弧線
  canvas.drawArc(mRectF, 270, 360, false, mPaint);

  canvas.drawArc(mRectF, 270, mSweepValue, false, mArcPaint);

  // 繪制文字
  float textWidth = mTextPaint.measureText(mShowText); //測量字體寬度,我們需要根據(jù)字體的寬度設(shè)置在圓環(huán)中間

  canvas.drawText(mShowText, (int)(length/2-textWidth/2), (int)(length/2+textWidth/2) , mTextPaint);

 }

這個時候,全部的效果已經(jīng)出來了,但是這個還是靜態(tài)的,對外暴露一個方法,讓數(shù)據(jù)可以動態(tài)的刷新

 public void setProgress(float mSweepValue) {
  float a = (float) mSweepValue;
  if (a != 0) {
   this.mSweepValue = (float) (360.0 * (a / 100.0));
   mShowText = mSweepValue + "%";
   Log.e("this.mSweepValue:", this.mSweepValue + "");
  } else {
   this.mSweepValue = 25;
   mShowText = 25 + "%";
  }

  invalidate();
 }

好了,所有的代碼都在這里了,老規(guī)矩,最后我貼上全部的代碼:

public class MViewOne extends View {
 private Paint mArcPaint, mCirclePaint, mTextPaint, mPaint;

 private float length;

 private float mRadius;

 private float mCircleXY;

 private float mSweepValue = 0;

 private String mShowText = "0%";

 private RectF mRectF;

 public MViewOne(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  initView();
 }

 public MViewOne(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView();
 }

 public MViewOne(Context context) {
  super(context);
  initView();
 }

 private void initView() {
  mArcPaint = new Paint();
  mArcPaint.setStrokeWidth(50);
  mArcPaint.setAntiAlias(true);
  mArcPaint.setColor(Color.GREEN);
  mArcPaint.setStyle(Style.STROKE);

  mCirclePaint = new Paint();
  mCirclePaint.setColor(Color.GREEN);
  mCirclePaint.setAntiAlias(true);

  mTextPaint = new Paint();
  mTextPaint.setAntiAlias(true);
  mTextPaint.setColor(Color.RED);
  mTextPaint.setStrokeWidth(0);

  mPaint = new Paint();
  mPaint.setStrokeWidth(40);
  mPaint.setAntiAlias(true);
  mPaint.setColor(Color.YELLOW);
  mPaint.setStyle(Style.STROKE);


 }

 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  length = w;
  mCircleXY = length / 2;
  mRadius = (float) (length * 0.5 / 2);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  // 畫圓
  mRectF = new RectF((float) (length * 0.1), (float) (length * 0.1),
    (float) (length * 0.9), (float) (length * 0.9));
  canvas.drawCircle(mCircleXY, mCircleXY, mRadius, mCirclePaint);
  // 畫弧線
  canvas.drawArc(mRectF, 270, 360, false, mPaint);

  canvas.drawArc(mRectF, 270, mSweepValue, false, mArcPaint);

  // 繪制文字
  float textWidth = mTextPaint.measureText(mShowText); //測量字體寬度,我們需要根據(jù)字體的寬度設(shè)置在圓環(huán)中間

  canvas.drawText(mShowText, (int)(length/2-textWidth/2), (int)(length/2+textWidth/2) , mTextPaint);

 }

 public void setProgress(float mSweepValue) {
  float a = (float) mSweepValue;
  if (a != 0) {
   this.mSweepValue = (float) (360.0 * (a / 100.0));
   mShowText = mSweepValue + "%";
   Log.e("this.mSweepValue:", this.mSweepValue + "");
  } else {
   this.mSweepValue = 25;
   mShowText = 25 + "%";
  }

  invalidate();
 }

}

謝謝閱讀,學習重在堅持,貴在堅持。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用ViewPage+Fragment仿微信界面

    使用ViewPage+Fragment仿微信界面

    這篇文章主要為大家詳細介紹了使用ViewPage+Fragment仿微信界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android自定義View實現(xiàn)圓形進度條

    Android自定義View實現(xiàn)圓形進度條

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)圓形進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Android編程中@id和@+id的區(qū)別分析

    Android編程中@id和@+id的區(qū)別分析

    這篇文章主要介紹了Android編程中@id和@+id的區(qū)別,較為詳細的分析講述了Android中資源引入的原理及使用@id和@+id引入資源的具體用法,總結(jié)了二者的區(qū)別,需要的朋友可以參考下
    2016-01-01
  • Android自定義酒店日期選擇器

    Android自定義酒店日期選擇器

    這篇文章主要為大家詳細介紹了Android自定義酒店日期選擇器、旅游日期區(qū)間選擇器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Android ListView用EditText實現(xiàn)搜索功能效果

    Android ListView用EditText實現(xiàn)搜索功能效果

    本篇文章主要介紹了Android ListView用EditText實現(xiàn)搜索功能效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Android實現(xiàn)屏幕各尺寸的獲取的示例

    Android實現(xiàn)屏幕各尺寸的獲取的示例

    本篇文章主要介紹了Android實現(xiàn)屏幕各尺寸的獲取的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Android 使用Vitamio打造自己的萬能播放器(1)——準備

    Android 使用Vitamio打造自己的萬能播放器(1)——準備

    本文主要介紹Android Vitamio,在Android開發(fā)視頻播放器的時候,大家經(jīng)常會遇到系統(tǒng)版本和不同的Android手機不同導(dǎo)致開發(fā)的軟件不能完美適用,這里給大家介紹個播放器插件可以適應(yīng)所有Android設(shè)備
    2016-07-07
  • Android仿QQ消息提示點拖拽功能

    Android仿QQ消息提示點拖拽功能

    這篇文章主要為大家詳細介紹了Android仿QQ消息提示點拖拽功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android TextView高級顯示技巧實例小結(jié)

    Android TextView高級顯示技巧實例小結(jié)

    這篇文章主要介紹了Android TextView高級顯示技巧,結(jié)合實例形式總結(jié)分析了Android TextView控件進行文字與圖片顯示的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • Android ItemDecoration 實現(xiàn)分組索引列表的示例代碼

    Android ItemDecoration 實現(xiàn)分組索引列表的示例代碼

    本篇文章主要介紹了Android ItemDecoration 實現(xiàn)分組索引列表的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-10-10

最新評論