在循环中创建唯一的postDelayed Runnable

时间:2011-07-05 21:46:45

标签: java android android-animation

我正在模仿帧动画;我把这一切都解决了。 我有一个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()不会在每次迭代时刷新;它只运作一次。

如何刷新或进行新的运行()?

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

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

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

第2步:转储Handler,因为您不需要它postDelayed()已在View上实施

步骤3:创建一个执行postDelayed()调用的帮助方法 - 我会在此处将该方法称为foo() - 并在您不正确调用的地方调用foo() postDelayed()

步骤4:在run()的{​​{1}}中,再次致电Runnable以重新安排foo()另一个延迟期

答案 1 :(得分: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()应该使您的视图重新绘制,并且您应该获得所需的效果。希望这有帮助!

这是Thread示例:

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

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