android绘图视图

时间:2014-07-13 13:42:06

标签: android view draw

我尝试为圆圈进度创建一个自定义视图,我在绘制上绘制了一些点,而不是我想在进度增加的时候在这一点上做点什么,这是我的代码:

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不起作用,它不会在旧的红色圆圈上绘制蓝色圆圈。

1 个答案:

答案 0 :(得分:0)

你在这里接近是不对的。通过在第一次迭代中保存画布,然后在单独的线程上更新它,您无法在不同的线程中更新视图。在onDraw方法调用期间,所有UI更新都应在UI线程上进行。

这是我的建议:

  1. 保留名为&#34; progress&#34;的实例成员,添加getter和setter以获得进度。
  2. 移动&#34; updateWithProgress&#34;中的所有代码你&#34; onDraw&#34;的方法方法,其中&#34;进展&#34;实例成员将替换参数。
  3. 每当需要更新进度时,请通过getter / setter&amp; amp;更改进度值。在视图上调用postInvalidate
  4. 这应该让你开始。