1

我正在模拟帧动画;我有这一切工作备用一个问题。我有一个 for 循环,在每次迭代中,它都会在延迟后更改 ImageView 的图像。

for(int i = 1; i <13; i++){
            if (stop== false){
                String imgName = "b"+ Integer.toString(i);
                  id = getResources().getIdentifier(imgName, "drawable", getPackageName());
                Handler handlerTimer = new Handler();
                handlerTimer.postDelayed(new Runnable(){
                    public void run() {
                       view.setImageDrawable((getResources().getDrawable(id)));            
                  }}, 300);

            }
        }

问题是 run() 不会在每次迭代时刷新。它只工作一次。

如何刷新或创建新的 run()?

我愿意接受任何其他方式来做到这一点。

任何意见,将不胜感激。

4

2 回答 2

1

第 1 步:将 定义Runnable为活动的数据成员(或此代码所在的任何位置)

步骤#2:转储Handler,因为您不需要它 -postDelayed()也实现View

步骤#3:创建一个执行调用的辅助方法postDelayed()——我将在foo()此处引用该方法——并foo()在你不调用的地方调用postDelayed()

步骤#4:在run()Runnable,再次调用foo()以重新安排Runnable另一个延迟期

于 2011-07-05T23:13:03.610 回答
0

试一试,如果它不起作用,那么请尝试其他方法:

for(int i = 1; i <13; i++)
{
    if (stop== false)
    {
        String imgName = "b"+ Integer.toString(i);
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());
        Handler handlerTimer = new Handler();
        handlerTimer.postDelayed(new Runnable(){
            public void run() {
                view.setImageDrawable((getResources().getDrawable(id)));
                view.invalidate();            
                }}, 300);

    }
}

invalidate() 应该会导致您的视图被重新绘制,并且您应该获得所需的效果。希望这可以帮助!

这是线程示例:

public class Main implements Runnable
{
    public Main()
    {
        Thread thread = new Thread(this);
        thread.start();
        //new Thread starts at run()
    }

    public void run()
    {
        String imgName = "b"+ Integer.toString(i);
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());
        try
        {
            for(int i = 1; i <13&!stop; i++)
            {
                view.setImageDrawable((getResources().getDrawable(id)));
                Thread.sleep(300);
            }
        }catch(Exception e){e.printStackTrace();}
    }

    public static void main(String args[]){new Main();}
}

如果您还需要其他任何东西,请告诉我!

于 2011-07-05T23:12:17.237 回答