有没有办法在Android中创建一个横扫弧?

时间:2013-01-04 17:00:55

标签: android graphics 2d geometry

目前我可以创建静态弧

例如:

ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(90, 12));
    progressArc.setIntrinsicHeight(100);
    progressArc.setIntrinsicWidth(100);
    progressArc.getPaint().setColor(Color.RED);
    ImageView iView = (ImageView) findViewById(R.id.background_circle);
    iView.setImageDrawable(progressArc);

其中background_circle是创建弧的imageView。但是当我尝试通过将所有内容放在循环中来为ArchShape的第二个参数提供动态值时,它只渲染最后一个实例。我也尝试睡眠线程,但没有看到任何早期的实例被渲染。

int i=0;

    while(i<12)
    {
    ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(90, i*12));
    progressArc.setIntrinsicHeight(100);
    progressArc.setIntrinsicWidth(100);
    progressArc.getPaint().setColor(Color.RED);
    ImageView iView = (ImageView) findViewById(R.id.background_circle);
    iView.setImageDrawable(progressArc);

    i++;
    }

请建议。

2 个答案:

答案 0 :(得分:1)

希望这有助于其他人:

Handler handler = new Handler(); 
        while(i<30)
        {
            i++;
            handler.postDelayed(new Runnable()
            { 
                public void run() 
                {  

                    ShapeDrawable progressArc = new ShapeDrawable(new ArcShape(0, 12*i));
                    progressArc.setIntrinsicHeight(5);
                    progressArc.setIntrinsicWidth(5);
                    progressArc.getPaint().setColor(Color.BLUE);
                    iView = (ImageView) findViewById(R.id.background_circle);
                    iView.setImageDrawable(progressArc);

                    i++;
                }
            }, 1000*i);

        } 

如果有人有更有效的解决方案,请告诉我。 :)

答案 1 :(得分:0)

你正在紧紧地做这件事。当您设置ImageView的可绘制图像时,会在UI线程队列上放置一条消息以重绘ImageView。

但是,因为你的循环没有给UI线程足够的时间来处理它的队列,所以更新将在你的循环结束后的某个时间发生。因此,您只会看到最后一个。

有几种方法可以做到这一点,但最简单的方法可能就是在可运行的情况下绘制弧线并使用计时器绘制每次扫描,比如每10毫秒或任何看起来平滑的扫描。