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

首頁 > 系統 > Android > 正文

Android studio圓形進度條 百分數跟隨變化

2019-10-22 18:25:14
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android studio圓形進度條展示的具體代碼,供大家參考,具體內容如下

MainActivity

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Gua mGua1; private Button play; private Button resele; private Button dao; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mGua1 = (Gua) findViewById(R.id.Circle);  mGua1.setTargetPercent(0);  play=(Button)findViewById(R.id.play);  resele=(Button)findViewById(R.id.resele);  dao=(Button)findViewById(R.id.dao);  play.setOnClickListener(this);  resele.setOnClickListener(this);  dao.setOnClickListener(this); } @Override public void onClick(View view) {  switch (view.getId()){   case R.id.play:    //設置目標百分比為100    mGua1.setTargetPercent(100);    mGua1.invalidate();    break;   case R.id.resele:    //設置目標百分比為0    mGua1.setTargetPercent(0);    mGua1.invalidate();    break;   case R.id.dao:    //設置目標百分比為100    mGua1.setTargetPercent(0);    mGua1.invalidate();    break;  } }}

Gua

import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class Gua extends View{ private Paint mCirclePaint; private Paint mTextPaint; private Paint mArcPaint; private int mCircleX; private int mCircleY; private float mCurrentAngle; private RectF mArcRectF; private float mStartSweepValue; private float mTargetPercent; private float mCurrentPercent; private int mRadius; private int mCircleBackground; private int mRingColor; private int mTextSize; private int mTextColor; public Gua(Context context, AttributeSet attrs, int defStyle) {  super(context, attrs, defStyle);  init(context); } public Gua(Context context, AttributeSet attrs) {  super(context, attrs);  //自定義屬性 values/attr  TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.PercentageRing);  //中間圓的背景顏色 默認為淺紫色  mCircleBackground = typedArray.getColor(R.styleable.PercentageRing_circleBackground, 0xffafb4db);  //外圓環的顏色 默認為深紫色  mRingColor = typedArray.getColor(R.styleable.PercentageRing_ringColor, 0xff6950a1);  //中間圓的半徑 默認為60  mRadius = typedArray.getInt(R.styleable.PercentageRing_radius, 60);  //字體顏色 默認為白色  mTextColor = typedArray.getColor(R.styleable.PercentageRing_textColor, 0xffffffff);  //最后一定要調用這個 釋放掉TypedArray  typedArray.recycle();  //初始化數據  init(context); } public Gua(Context context) {  super(context);  init(context); } private void init(Context context){  //圓環開始角度 -90° 正北方向  mStartSweepValue = -90;  //當前角度  mCurrentAngle = 0;  //當前百分比  mCurrentPercent = 0;  //設置中心園的畫筆  mCirclePaint = new Paint();  mCirclePaint.setAntiAlias(true);  mCirclePaint.setColor(mCircleBackground);  mCirclePaint.setStyle(Paint.Style.FILL);  //設置文字的畫筆  mTextPaint = new Paint();  mTextPaint.setColor(mTextColor);  mTextPaint.setAntiAlias(true);  mTextPaint.setStyle(Paint.Style.FILL);  mTextPaint.setStrokeWidth((float) (0.025*mRadius));  mTextPaint.setTextSize(mRadius/2);  mTextPaint.setTextAlign(Align.CENTER);  //設置外圓環的畫筆  mArcPaint = new Paint();  mArcPaint.setAntiAlias(true);  mArcPaint.setColor(mRingColor);  mArcPaint.setStyle(Paint.Style.STROKE);  mArcPaint.setStrokeWidth((float) (0.075*mRadius));  //獲得文字的字號 因為要設置文字在圓的中心位置  mTextSize = (int) mTextPaint.getTextSize(); } //主要是測量wrap_content時候的寬和高,因為寬高一樣,只需要測量一次寬即可,高等于寬 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  setMeasuredDimension(measure(widthMeasureSpec), measure(widthMeasureSpec));  //設置圓心坐標  mCircleX = getMeasuredWidth()/2;  mCircleY = getMeasuredHeight()/2;  //如果半徑大于圓心橫坐標,需要手動縮小半徑的值,否則就畫到外面去了  if (mRadius>mCircleX) {   //設置半徑大小為圓心橫坐標到原點的距離   mRadius = mCircleX;   mRadius = (int) (mCircleX-0.075*mRadius);   //因為半徑改變了,所以要重新設置一下字體寬度   mTextPaint.setStrokeWidth((float) (0.025*mRadius));   //重新設置字號   mTextPaint.setTextSize(mRadius/2);   //重新設置外圓環寬度   mArcPaint.setStrokeWidth((float) (0.075*mRadius));   //重新獲得字號大小   mTextSize = (int) mTextPaint.getTextSize();  }  //畫中心園的外接矩形,用來畫圓環用  mArcRectF = new RectF(mCircleX-mRadius, mCircleY-mRadius, mCircleX+mRadius, mCircleY+mRadius); } //當wrap_content的時候,view的大小根據半徑大小改變,但最大不會超過屏幕 private int measure(int measureSpec){  int result=0;  int specMode = MeasureSpec.getMode(measureSpec);  int specSize = MeasureSpec.getSize(measureSpec);  if (specMode == MeasureSpec.EXACTLY) {   result = specSize;  }else {   result =(int) (1.075*mRadius*2);   if (specMode == MeasureSpec.AT_MOST) {    result = Math.min(result, specSize);   }  }  return result; } //開始畫中間圓、文字和外圓環 @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  //畫中間圓  canvas.drawCircle(mCircleX, mCircleY, mRadius, mCirclePaint);  //畫圓環  canvas.drawArc(mArcRectF, mStartSweepValue ,mCurrentAngle, false, mArcPaint);  //畫文字  canvas.drawText(String.valueOf(mCurrentPercent)+"%", mCircleX, mCircleY+mTextSize/4, mTextPaint);  //判斷當前百分比是否小于設置目標的百分比  if (mCurrentPercent<mTargetPercent) {   //當前百分比+1   mCurrentPercent+=1;   //當前角度+360   mCurrentAngle+=3.6;   //每10ms重畫一次   postInvalidateDelayed(10);  }/*else if(mCurrentPercent==mTargetPercent){   //當前百分比-1   mCurrentPercent=0;   //當前角度+360   mCurrentAngle=0;   //每10ms重畫一次   postInvalidateDelayed(10);  }*/else if(mCurrentPercent>mTargetPercent){   //當前百分比-1   mCurrentPercent-=1;   //當前角度+360   mCurrentAngle-=3.6;   //每10ms重畫一次   postInvalidateDelayed(10);  } } //設置目標的百分比 public void setTargetPercent(int percent){  this.mTargetPercent = percent; }}

Xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <Button  android:id="@+id/but1"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:text="改變外層圓環顏色"  /> <com.bwie.test.wuxiaorui1508a20171009.Gua  android:id="@+id/Circle"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  app:radius="90"  app:textColor="#ffffffff"  /> <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="horizontal"  android:gravity="center"  >  <Button   android:id="@+id/play"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="開始"   />  <Button   android:id="@+id/resele"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="重置"   />  <Button   android:id="@+id/dao"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="暫停"   /> </LinearLayout></LinearLayout>

values文件中的attrs

<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="PercentageRing">  <attr name="radius" format="integer"/>  <attr name="circleBackground" format="color"/>  <attr name="ringColor" format="color"/>  <attr name="textColor" format = "color"/> </declare-styleable></resources>

效果展示:

Android,studio,進度條

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 济源市| 永年县| 淮阳县| 台前县| 墨脱县| 茶陵县| 武宣县| 屏东县| 普洱| 江城| 兴安县| 常德市| 临颍县| 翁牛特旗| 南丰县| 北票市| 泸西县| 高平市| 定南县| 洛隆县| 读书| 武安市| 五家渠市| 江油市| 泾源县| 阿瓦提县| 腾冲县| 开平市| 沛县| 互助| 广州市| 云梦县| 扎兰屯市| 孟州市| 肃北| 康乐县| 敦煌市| 天镇县| 轮台县| 敦煌市| 高唐县|