sufurfaceview类
package com.progress;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class ProgressView extends SurfaceView implements SurfaceHolder.Callback{
private MyThread thread;
public ProgressView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public ProgressView(Context context) {
super(context);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread = new MyThread(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
thread.setRect(0, 0, width, height);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
thread.isRunning = false;
}
}
绘制图形线程类
package com.progress;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.SystemClock;
import android.view.SurfaceHolder;
public class MyThread extends Thread {
private SurfaceHolder holder;
public boolean isRunning;
private Paint paint;
private Rect rect;
public MyThread(SurfaceHolder holder){
this.holder = holder;
isRunning = true;
paint = new Paint();
rect = null;
}
public void setRect(int left,int top,int right,int bottom){
rect = new Rect(left, top, right, bottom);
}
@Override
public void run() {
int count = 0;
while(isRunning){
Canvas canvas = holder.lockCanvas();
if(rect==null){
}else{
paint.setColor(Color.WHITE);
canvas.drawRect(rect, paint);
}
paint.setColor(Color.GREEN);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(15);
paint.setAntiAlias(true);
int radio = rect.width()/2-60;
canvas.drawCircle(rect.width()/2, rect.height()/2, radio, paint);
RectF rectf = new RectF(rect.width()/2-radio, rect.height()/2-radio, rect.width()/2+radio, rect.height()/2+radio);
//TODO 更改颜色有些问题
if(count-360>0){
paint.setColor(Color.LTGRAY);
}else if(count-360==0){
paint.setColor(Color.CYAN);
}else{
paint.setColor(Color.MAGENTA);
}
canvas.drawArc(rectf, 0, count, false, paint);
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
canvas.drawCircle(rect.width()/2, rect.height()/2, 40, paint);
Path path = new Path();
int helfWidth = rect.width()/2;
int helfHeight = rect.height()/2;
int startX = (int) (helfWidth+radio*Math.cos(Math.toRadians(count)));
int startY = (int) (helfHeight+radio*Math.sin(Math.toRadians(count)));
int innerStartXLeft = (int) (helfWidth+40*Math.cos(Math.toRadians(count+90)));
int innerStartYLeft = (int) (helfHeight+40*Math.sin(Math.toRadians(count+90)));
int innerStartXRight = (int) (helfWidth+40*Math.cos(Math.toRadians(count-90)));
int innerStartYRight = (int) (helfHeight+40*Math.sin(Math.toRadians(count-90)));
// path.moveTo(helfWidth, helfHeight-helfWidth+40);
path.moveTo(startX, startY);
// path.lineTo(rect.width()/2-20, rect.height()/2);
// path.lineTo(rect.width()/2+20, rect.height()/2);
path.lineTo(innerStartXLeft, innerStartYLeft);
path.lineTo(innerStartXRight, innerStartYRight);
path.close();
paint.setColor(Color.RED);
paint.setStrokeWidth(6);
canvas.drawPath(path, paint);
paint.setTextSize(24);
paint.setColor(Color.BLACK);
drawArText(rectf, canvas, paint);
holder.unlockCanvasAndPost(canvas);
SystemClock.sleep(100);
count++;
}
}
private void drawArText(RectF rect,Canvas canvas,Paint paint){
//在圆周绘制文字 TODO 做成钟表形式的样子
Path path;
for(int i = 0;i<4;i++){
path = new Path();
path.addArc(rect, -90+i*90,90);
canvas.drawTextOnPath(i*3+"", path, 0, -10, paint);
}
canvas.save();
}
}
这样就可以了
这是下载地址
http://download.csdn.net/detail/jackice01/7669319