Android开发 自定义ProgressBar

来源:互联网 发布:php curl 伪装浏览器 编辑:程序博客网 时间:2024/05/17 21:54

在Android开发中不可避免的需要自定义一些控件,我在开发过程中需要重写一个ProgressBar来实现需要的特效。

由于注释的比价详细,我就直接上代码,不懂的,在翻一些资料,都很容易理解:

下面这个类就是我们重写的ProgressBar:

package com.jinbi.app.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class CircleProgressBar extends View {private float maxProgress;private float progress;private int progressStrokeWidth;private RectF oval;                      //画图所在的矩形区域private Paint paint;public CircleProgressBar(Context context, AttributeSet attrs) {super(context, attrs);oval = new RectF();paint = new Paint();maxProgress = 100;progress = 0;progressStrokeWidth = 47;}/** * @param context       上下文对象 * @param attrs       * @param progress       * @param maxProgress   进度条最大值 * @param progressStrokeWidth   进度条宽度 */public CircleProgressBar(Context context, AttributeSet attrs,float progress,float maxProgress,int progressStrokeWidth) {super(context, attrs);this.maxProgress = maxProgress;this.progress = progress;this.progressStrokeWidth = progressStrokeWidth;oval = new RectF();paint = new Paint();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int width = this.getWidth();int height = this.getHeight();if (width != height){int min = Math.min(width, height);width = min;height = min;}paint.setAntiAlias(true);     //设置画笔为抗锯齿paint.setColor(Color.WHITE);  //设置画笔颜色canvas.drawColor(Color.TRANSPARENT); //白色背景paint.setStrokeWidth(progressStrokeWidth); //线宽paint.setStyle(Style.STROKE);oval.left = progressStrokeWidth;    //左上角xoval.top = progressStrokeWidth;     //左上角yoval.right = width - progressStrokeWidth;  //左下角xoval.bottom = height - progressStrokeWidth; //右下角ypaint.setColor(Color.rgb(226, 226, 226));canvas.drawArc(oval, -90, 360, false, paint);//绘制进度条,这里是蓝色canvas.drawArc(oval, -90, 360, false, paint);//绘制白色圆圈,即进度条背景paint.setColor(Color.rgb(38, 152, 200));canvas.drawArc(oval, -90, ((float)progress/maxProgress)*360, false, paint);//绘制进度条,这里是蓝色}public float getMaxProgress(){return maxProgress;}public void setMaxProgress(int maxProgress){this.maxProgress = maxProgress;}public void setProgress(int maxProgress){this.progress = progress;}public void setProgressNotInUiThread(float progress,float maxProgress){this.progress = progress;this.maxProgress = maxProgress;this.postInvalidate();}}

在需要用到此控件的布局文件中添加:

    <com.jinbi.app.view.CircleProgressBar        android:layout_marginLeft="25dp"        android:id="@+id/circleProgressbar"        android:layout_width="268dp"        android:layout_height="268dp"         android:clickable="true"/>

这样控件就被添加到布局中了。

最后通过JAVA代码就可以得到此控件了:

final CircleProgressBar progressBar = (CircleProgressBar)findViewById(R.id.circleProgressbar);
控件的显示图形如下,随着点击就可以实现精度效果了,由于我是项目直接部署到手机上了,不好截图,以后有时间再补上运行时的效果图。


原创粉丝点击