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();
}
Run Code Online (Sandbox Code Playgroud)
它调用这个方法,如果我没有循环这样做.
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);
}
Run Code Online (Sandbox Code Playgroud)
你的主要问题是你的循环没有休息,所以它不断运行这个功能,发布了大量的可运行的东西.
你想要做的是在另一个100毫秒之后让runnable调用自己.看看这个例子:
if(old_x != new_x)
timedMoveIV(100);
Run Code Online (Sandbox Code Playgroud)
这里只需调用一次该函数.之后,让发布的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);
}
Run Code Online (Sandbox Code Playgroud)
它应该停止一次img.getX() == new_x.但是请注意演员表int,因为如果你把它放在外面,你可能会在目的地的一个像素内得到一些振荡.
这假设new_x是一个int.如果它也是浮点数,你应该将两者都转换为int进行比较,或者将它们与最小阈值进行比较.例如,如果0.5差异不足,则将其视为"完成".
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |