Android中怎么實(shí)現(xiàn)圓形漸變加載進(jìn)度條,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),永德企業(yè)網(wǎng)站建設(shè),永德品牌網(wǎng)站建設(shè),網(wǎng)站定制,永德網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,永德網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。package com.view;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.SweepGradient;import android.util.AttributeSet;import android.view.View;import com.fx.R;public class CompletedView extends View { // 畫實(shí)心圓的畫筆 private Paint mCirclePaint; // 畫圓環(huán)的畫筆 private Paint mRingPaint; // 畫圓環(huán)的畫筆背景色 private Paint mRingPaintBg; // 畫字體的畫筆 private Paint mTextPaint; // 圓形顏色 private int mCircleColor; // 圓環(huán)顏色 private int mRingColor; // 圓環(huán)背景顏色 private int mRingBgColor; // 半徑 private float mRadius; // 圓環(huán)半徑 private float mRingRadius; // 圓環(huán)寬度 private float mStrokeWidth; // 圓心x坐標(biāo) private int mXCenter; // 圓心y坐標(biāo) private int mYCenter; // 字的長(zhǎng)度 private float mTxtWidth; // 字的高度 private float mTxtHeight; // 總進(jìn)度 private int mTotalProgress = 100; // 當(dāng)前進(jìn)度 private int mProgress; private String string; public CompletedView(Context context, AttributeSet attrs) { super(context, attrs); // 獲取自定義的屬性 initAttrs(context, attrs); initVariable(); } //屬性 private void initAttrs(Context context, AttributeSet attrs) { TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TasksCompletedView, 0, 0); mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius, 80); mStrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth, 10); mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor, 0xFFFFFFFF); mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor, 0xFFFFFFFF); mRingBgColor = typeArray.getColor(R.styleable.TasksCompletedView_ringBgColor, 0xFFFFFFFF); mRingRadius = mRadius + mStrokeWidth / 2; } RectF oval; //初始化畫筆 private void initVariable() { oval = new RectF(); //內(nèi)圓 mCirclePaint = new Paint(); mCirclePaint.setAntiAlias(true); mCirclePaint.setColor(mCircleColor); mCirclePaint.setStyle(Paint.Style.FILL); mCirclePaint.setStrokeCap(Paint.Cap.ROUND); //外圓弧背景 mRingPaintBg = new Paint(); mRingPaintBg.setAntiAlias(true); mRingPaintBg.setColor(mRingBgColor); mRingPaintBg.setStyle(Paint.Style.STROKE); mRingPaintBg.setStrokeWidth(mStrokeWidth); //外圓弧 mRingPaint = new Paint(); mRingPaint.setAntiAlias(true);// mRingPaint.setColor(mRingColor); mRingPaint.setStyle(Paint.Style.STROKE); mRingPaint.setStrokeWidth(mStrokeWidth); mRingPaint.setStrokeCap(Paint.Cap.ROUND);//設(shè)置線冒樣式,有圓 有方 //中間字 mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setStyle(Paint.Style.FILL); mTextPaint.setColor(mRingColor); mTextPaint.setTextSize(mRadius / 2); Paint.FontMetrics fm = mTextPaint.getFontMetrics(); mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent); } SweepGradient sweepGradient; //畫圖 @Override protected void onDraw(Canvas canvas) { mXCenter = getWidth() / 2; mYCenter = getHeight() / 2; //內(nèi)圓 canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint); //外圓弧背景 RectF oval1 = new RectF(); oval1.left = (mXCenter - mRingRadius); oval1.top = (mYCenter - mRingRadius); oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius); oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius); canvas.drawArc(oval1, 0, 360, false, mRingPaintBg); //圓弧所在的橢圓對(duì)象、圓弧的起始角度、圓弧的角度、是否顯示半徑連線 //外圓弧 if (mProgress > 0 ) { oval.left = (mXCenter - mRingRadius); oval.top = (mYCenter - mRingRadius); oval.right = mRingRadius * 2 + (mXCenter - mRingRadius); oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius); if (sweepGradient==null) { int[] arcColors= new int[]{mRingColor,Color.parseColor("#b05e39"),mRingColor}; float[] arcPostion=new float[]{0.0f,0.5f,0.95f};// sweepGradient = new SweepGradient(mXCenter, mYCenter, mRingColor,Color.parseColor("#b05e39")); sweepGradient = new SweepGradient(mXCenter, mYCenter, arcColors,arcPostion); Matrix matrix = new Matrix(); matrix.setRotate(-90,mXCenter,mYCenter); sweepGradient.setLocalMatrix(matrix); mRingPaint.setShader(sweepGradient); } canvas.drawArc(oval, -90, ((float)mProgress / mTotalProgress) * 360, false, mRingPaint); // //字體 String txt = mProgress + "%"; mTxtWidth = mTextPaint.measureText(txt, 0, txt.length()); canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint); } } public void setText(String string){ } //設(shè)置進(jìn)度 public void setProgress(int progress) { mProgress = progress; postInvalidate();//重繪 }}
看完上述內(nèi)容,你們掌握Android中怎么實(shí)現(xiàn)圓形漸變加載進(jìn)度條的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!