<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • Androidstudio中怎么實現一個圓形進度條

            Android studio中怎么實現一個圓形進度條,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

            目前成都創(chuàng)新互聯公司已為成百上千的企業(yè)提供了網站建設、域名、虛擬主機、網站托管、企業(yè)網站設計、寧陜網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發(fā)展。

            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);
              //外圓環(huán)的顏色 默認為深紫色
              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){
              //圓環(huán)開始角度 -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);
              //設置外圓環(huán)的畫筆
              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);
               //重新設置外圓環(huán)寬度
               mArcPaint.setStrokeWidth((float) (0.075*mRadius));
               //重新獲得字號大小
               mTextSize = (int) mTextPaint.getTextSize();
              }
              //畫中心園的外接矩形,用來畫圓環(huán)用
              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;
            
             }
             //開始畫中間圓、文字和外圓環(huán)
             @Override
             protected void onDraw(Canvas canvas) {
              super.onDraw(canvas);
              //畫中間圓
              canvas.drawCircle(mCircleX, mCircleY, mRadius, mCirclePaint);
              //畫圓環(huán)
              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="改變外層圓環(huán)顏色"
              />
             <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中怎么實現一個圓形進度條的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道,感謝各位的閱讀!

            當前題目:Androidstudio中怎么實現一個圓形進度條
            網頁鏈接:http://www.jbt999.com/article0/jjeeio.html

            成都網站建設公司_創(chuàng)新互聯,為您提供網站策劃App開發(fā)、動態(tài)網站、全網營銷推廣、網站排名品牌網站建設

            廣告

            聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

            微信小程序開發(fā)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 超碰在线图片 | 久久久蜜桃视频 | 大鸡巴免费看 | 东京热久久综合 | 青青草在线视频免费在线观看 |