自定义进度条—圆形以及线条
CD:
弄了一天半终于将Android机与电脑通过usb数据线传输数据的问题给解决了,过几天将遇到的问题写出来以免下次用到时又忘了.
比较简单直接上代码:
1,自定义myProcessView
public class myProcessView extends View {
private Paint mPaint; //画笔
private int color; //设置的颜色
private String text; // 文字显示进度
private int mProcess = 0; //当前进度值
private int Max = 0; //进度的最大值
private double n = 3.6; //圆形进度条要乘的弧度
int screenWidth; //屏幕的宽
public myTextView(Context context) {
this(context, null);
}
public myTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public myTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//得到屏幕的宽
screenWidth = getScreenWidth(context);
//在构造方法中创建画笔
mPaint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.STROKE);
RectF rect = new RectF(0, 0, 40, 40); // 坐标是相对于父布局的
int lineProcess = (mProcess/max)*screenWidth;
//绘制线性进度条
canvas.drawLine(0,0,lineProcess ,0,mPaint);
//绘制圆形进度条
canvas.drawArc(rect, 3, (mProcess *3.6), false, mPaint);
}
public void setText(String t) {
this.text = t;
}
public void setMax(int max) {
this.max= max;
}
public void setProcess(int pro) {
this.mProcess = pro;
if(mProcess > 100){
return;
}else{
invalidate();
}
invalidate();
}
}
}
2,使用进度条
public class CustomActivity extends Activity {
myProcessView myProcessView ;
int mCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom);
myProcessView = (com.example.custom.view.myProcessView ) findViewById(R.id.my);
myProcessView.setMax(设置进度的最大值);
//一般这行代码都是在得到下载进度是调用
myProcessView.setProcess(当前进度);
}
}
备注:
圆形进度条可以使用.线性进度条有一个问题是 如果是下载文件,我们没有办法得到文件最大的值(也就是进度比无法得出),要下班了.有时间在整理.