Android的postDelayed工作,但不能把它在一个循环?(Android postDela

2019-08-17 07:03发布

对不起,我是一个小白我读过无数的教程有关使一个简单的计时器,并想知道为什么它不工作,直到我发现它是while循环导致我已删除它的问题OO,然后它的作品,但只有1次我需要,但这样的动作完成使用循环:C

继承人的代码:

old_x是从onTouch事件,也许是因为我是他们铸造为int问题的ImageView的和一个new_x协调? 我不知道我必须这样做它的工作原理,请帮助○:

    while(old_x != new_x)
    {
        timedMoveIV(100);
        old_x = (int)img.getX();
    }

它会调用这个方法,如果我这样做没有环路的作品。

public void timedMoveIV(int time_ms)
{
    //sleep for time_ms milliseconds
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
         public void run() { 
            if(new_x > img.getX())
            {
            img.setX(img.getX() + 1);
            }
            else
            {
            img.setX(img.getX() - 1);   
            }
         } 
    }, time_ms);
}

Answer 1:

你的主要问题是,你的循环没有休息,所以它的持续运行的功能,发布一个极大可运行。

什么你想要做的是使可运行调用本身另一个100毫秒后。 看看这个例子:

if(old_x != new_x)
    timedMoveIV(100);

在这里,你只需调用函数一次。 在这之后,你让发布可运行自行决定是否需要再次搬迁:

public void timedMoveIV(final int time_ms)
{
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
        public void run() 
        { 
            if(new_x > img.getX())
                img.setX(img.getX() + 1);
            else
                img.setX(img.getX() - 1); 

            // if not in position, call again
            if((int)img.getX() != new_x)
                timedMoveIV(time_ms); 
        } 
    }, time_ms);
}

它应该停止一次img.getX() == new_x 。 注意投地int ,不过,因为如果你离开它,你可能会得到一些振荡,因为它的目的地的像素内获得。

这是假设new_xint 。 如果它是一个浮动为好,您应该投两成int进行比较,或者把它们比作一个最低门槛。 举例来说,如果有小于0.5的区别,把它当作“完成”。



文章来源: Android postDelayed works but can't put it in a loop?