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);控件的显示图形如下,随着点击就可以实现精度效果了,由于我是项目直接部署到手机上了,不好截图,以后有时间再补上运行时的效果图。
- Android开发 自定义ProgressBar
- android开发 自定义圆形Progressbar
- 【ProgressBar】Android 自定义ProgressBar集锦
- Android开发高级技术自定义进度条(自定义progressbar)
- 【移动开发】自定义ProgressBar
- android自定义标题栏progressBar
- android 自定义ProgressBar
- Android 自定义ProgressBar (一)
- android自定义progressbar
- Android 自定义progressbar
- android 自定义progressbar
- Android自定义RatingBar && ProgressBar
- Android 自定义ProgressBar
- android自定义ProgressBar
- Android中自定义ProgressBar
- 【Android】自定义ProgressBar
- Android 自定义ProgressBar
- android 自定义ProgressBar
- vs2010 打开 VS2012 项目的解决方案
- WordPress 调用分类
- HDU 1068 Girls and Boys (二分图匹配---最大独立集)
- hadoop集群搭建
- annotation与httpclient -- HttpClient使用Annotation和Proxy
- Android开发 自定义ProgressBar
- ORA-01552: 非系统表空间 'TEMP' 不能使用系统回退段
- POJ 2001 Shortest Prefixes
- FLV文件格式解析
- 51job
- Coding the Matrix: Week 7 Orthogonalization 学习笔记
- 网络编程1
- android 项目更改包名的方法
- bsdiff for ubuntu