0

目前我能够创建一个静态弧

例如:

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++;
    }

请指教。

4

2 回答 2

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);

        } 

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

于 2013-01-07T15:29:25.723 回答
0

您正在一个紧密的循环中执行此操作。当您设置 ImageView 的图像可绘制时,会在 UI 线程队列中放置一条消息以重绘 ImageView。

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

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

于 2013-01-04T17:22:43.433 回答