1 java android casting while-loop postdelayed
对不起,我是一个菜鸟我读了无数关于制作一个简单的计时器的教程,并想知道为什么它不起作用,直到我注意到它是while循环导致问题oO我已经删除它然后它工作但只有一次我需要使用循环,所以运动结束:C
下面是代码:
old_x是来自ImageView的坐标和来自onTouch事件的new_x,可能是问题,因为我将它们作为int转换?我不知道我需要做什么,所以它有效请帮助O:
    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);
}
你的主要问题是你的循环没有休息,所以它不断运行这个功能,发布了大量的可运行的东西.
你想要做的是在另一个100毫秒之后让runnable调用自己.看看这个例子:
if(old_x != new_x)
    timedMoveIV(100);
这里只需调用一次该函数.之后,让发布的runnable决定是否需要再次移动:
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_x是一个int.如果它也是浮点数,你应该将两者都转换为int进行比较,或者将它们与最小阈值进行比较.例如,如果0.5差异不足,则将其视为"完成".
| 归档时间: | 
 | 
| 查看次数: | 2980 次 | 
| 最近记录: |