最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義View弧線進(jìn)度控件

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

這個(gè)是一個(gè)以弧線為依托的進(jìn)度控件,主要包括了兩個(gè)圓弧、一個(gè)圓、一個(gè)文本。

 

當(dāng)我們點(diǎn)擊開始按鈕的時(shí)候,會(huì)出現(xiàn)一個(gè)動(dòng)畫,逐漸的出現(xiàn)進(jìn)度,好了,下面開始我們的編碼。

新建一個(gè)類,繼承自View,實(shí)現(xiàn)三個(gè)構(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);


 }

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

在我們的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);

 }

這時(shí)候,圓的半徑、圓的起繪點(diǎn),都已經(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); //測(cè)量字體寬度,我們需要根據(jù)字體的寬度設(shè)置在圓環(huán)中間

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

 }

這個(gè)時(shí)候,全部的效果已經(jīng)出來了,但是這個(gè)還是靜態(tài)的,對(duì)外暴露一個(gè)方法,讓數(shù)據(jù)可以動(dòng)態(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); //測(cè)量字體寬度,我們需要根據(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();
 }

}

謝謝閱讀,學(xué)習(xí)重在堅(jiān)持,貴在堅(jiān)持。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

仙游县| 松原市| 齐齐哈尔市| 理塘县| 吴旗县| 南木林县| 沾益县| 绿春县| 通渭县| 丰台区| 云梦县| 乾安县| 忻城县| 绿春县| 嘉鱼县| 长垣县| 渑池县| 香河县| 丘北县| 鄂伦春自治旗| 卓尼县| 格尔木市| 宁都县| 信丰县| 翁源县| 平谷区| 和政县| 洱源县| 张家口市| 蕲春县| 南召县| 青海省| 西贡区| 咸宁市| 新闻| 岳阳市| 东海县| 鲁山县| 新野县| 银川市| 汕尾市|