我尝试为圆圈进度创建一个自定义视图,我在绘制上绘制了一些点,而不是我想在进度增加的时候在这一点上做点什么,这是我的代码:
public SpinnerView(Context context) {
super(context);
}
@SuppressLint("DrawAllocation")
protected void onDraw(Canvas canvas) {
//TODO Auto-generated method stub
super.onDraw(canvas);
float x = 0;
float y = 0;
for(int i=0; i<360; i = i + 12){
x = (float) (view.getWidth()/2 + 260 * Math.cos(Math.toRadians(i)));
y = (float) (view.getHeight()/2 + 260 * Math.sin(Math.toRadians(i)));
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawCircle((float) x, (float) y, 10, paint);
}
viewCanvas = canvas;
}
public void updateWithProgress (int progress){
// progress : total = x : 36
int point = (360*progress)/total;
point = point/12;
Log.d("point" + point,"-------");
float x = (float) (view.getWidth()/2 + 260 * Math.cos(Math.toRadians(point)));
float y = (float) (view.getHeight()/2 + 260 * Math.sin(Math.toRadians(point)));
Paint paint = new Paint();
paint.setColor(Color.BLUE);
viewCanvas.drawCircle( x, y, 20, paint);
}
}
问题是updateWithProgress不起作用,它不会在旧的红色圆圈上绘制蓝色圆圈。
答案 0 :(得分:0)
你在这里接近是不对的。通过在第一次迭代中保存画布,然后在单独的线程上更新它,您无法在不同的线程中更新视图。在onDraw方法调用期间,所有UI更新都应在UI线程上进行。
这是我的建议:
postInvalidate
。这应该让你开始。