圆形进度条以及百分率指示器 Scroller类的练习
生活随笔
收集整理的這篇文章主要介紹了
圆形进度条以及百分率指示器 Scroller类的练习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載時請注明出處,尊重他人的勞動成果,謝謝。
先附上效果圖:
這個控件是動態加載到75%的,主要我忘了怎么做動態圖,就先放一個靜態圖在這里表示表示。旁邊這個沒有沒有喜歡的?有想知道的 我可以告訴答案。
現附上代碼,不懂的請留言:
package com.sahadev.circleview;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetrics; import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Scroller;public class CircleView extends View implements OnClickListener {private Paint outPaint, inPaint;/* The Circle's radius */private int radius = 200;/* The torus's width */private int width = 50, backgroundColor = Color.WHITE;// 默認 背景色為純白private RectF mTempRectF = new RectF();private int mProgress;// 當前進度private int mTargetProgress = 75;// 目標進度private int mWidth = 400, mHeight = 400;// 該控件的初始大小為400*400private Scroller mScroller;// 滑動輔助類private int duration = 1000;// 動畫間隔時間private int textSize = 50, mFontHeight;private float mTextWidth = 0;public CircleView(Context context) {this(context, null);}public CircleView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public CircleView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);outPaint = new Paint();inPaint = new Paint();outPaint.setTextSize(textSize);mScroller = new Scroller(context);mScroller.forceFinished(false);outPaint.setColor(Color.argb(90, 90, 90, 90));outPaint.setStyle(Paint.Style.FILL_AND_STROKE);outPaint.setAntiAlias(true);inPaint.setColor(backgroundColor);inPaint.setAntiAlias(true);setBackgroundColor(backgroundColor);FontMetrics fm = outPaint.getFontMetrics();// 得到系統默認字體屬性mFontHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 獲得字體高度mFontHeight = mFontHeight - textSize;mTempRectF.set(0, 0, mWidth, mHeight);}public void setTextSize(int textSize) {this.textSize = textSize;}/** 設置背景色* * @see android.view.View#setBackgroundColor(int)*/public void setBackgroundColor(int color) {this.backgroundColor = color;}/*** 設置圓圈顏色* * @param color*/public void setCircleColor(int color) {outPaint.setColor(color);}/*** 設置圓圈半徑* * @param radius*/public void setRadius(int radius) {this.radius = radius;}/*** 設置圓圈寬度* * @param width*/public void setWidth(int width) {this.width = width;}/*** 設置目標進度* * @param progress* 大于0,小于100*/public void setTargetProgress(int progress) {this.mTargetProgress = progress;}/*** 可以作為進度條設置當前進度* * @param progress*/public void setProgress(int progress) {this.mProgress = progress;postInvalidate();}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:onClick(this);return true;}return super.onTouchEvent(event);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawArc(mTempRectF, -90, 360 * mProgress / 100, true, outPaint);// 畫一個扇形canvas.drawCircle(mWidth / 2, mHeight / 2, radius - width, inPaint);// 中心畫一個圓mTextWidth = outPaint.measureText(mProgress + "%");canvas.drawText(mProgress + "%", (mWidth - mTextWidth) / 2, (mHeight) / 2 + mFontHeight, outPaint);}/** 獲取適合的高寬* * @see android.view.View#onMeasure(int, int)*/@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int size = 0;size = widthMeasureSpec > mWidth && heightMeasureSpec > mHeight ? (mWidth > mHeight ? mHeight : mWidth) : (widthMeasureSpec > heightMeasureSpec ? heightMeasureSpec: widthMeasureSpec);/* 該控件為正方形 */setMeasuredDimension(size, size);}/** 觸動該控件 繪制到指定位置* * @see android.view.View.OnClickListener#onClick(android.view.View)*/@Overridepublic void onClick(View v) {mScroller.startScroll(0, 0, mTargetProgress, 0, duration);postInvalidate();}/*** 設置動畫繪制時間* * @param duration*/public void setDuration(int duration) {this.duration = duration;}@Overridepublic void computeScroll() {super.computeScroll();if (mScroller.computeScrollOffset()) {mProgress = mScroller.getCurrX();postInvalidate();}}}像一般自定義控件使用這個控件就可以了,具體方法相信大家都懂得,我就不貼方法了,只用設置進去就可以看到效果。
總結
以上是生活随笔為你收集整理的圆形进度条以及百分率指示器 Scroller类的练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: 【LeetCode】3月16日打卡-Da