警告:这是我第一次使用线程和第一次尝试动画。请耐心等待。
我想旋转ImageView。我为它设置了一个帖子:
public class ThreadAnimation extends Thread
{
private ImageView iv;
private RotateTransition rt;
public ThreadAnimation(ImageView iv)
{
this.iv = iv;
}
@Override
public void run()
{
while (true)
{
RotateTransition r = new RotateTransition();
r.setToAngle(360);
r.setCycleCount(1);
r.setDuration(Duration.millis(300));
r.setNode(iv);
r.play();
try
{
sleep(100);
} catch (InterruptedException e)
{
return;
}
}
}
}
按下按钮后,我在控制器类中调用它。
animation.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle (ActionEvent abschicken)
{
ThreadAnimation thread = null; //ANIMATION PIZZA
if (thread == null)
{
thread = new ThreadAnimation(olivenview);
thread.start();
}
}
});
我的ImageView olivenview 会像我想要的那样旋转。然而,它似乎停止需要相当长的时间(我可以看到它因为按钮触发它仍然看起来触发了一段时间)并且当我继续按下它第二次之后,我得到一个不间断的错误流与很多空指针异常。我很无能,任何人都可以帮助我吗?这是由于我的线程设置还是问题出在其他地方(代码中我没有在这里发布)?
答案 0 :(得分:1)
我相信你不需要线程。请注意,.play()
方法立即返回,动画将在后台运行。
话虽如此,试试这个。
...
//Create your rotation
final RotateTransition r = new RotateTransition();
r.setToAngle(360);
r.setCycleCount(1);
r.setDuration(Duration.millis(300));
r.setNode(iv);
//When the button is pressed play the rotation. Try experimenting with .playFromStart() instead of .play()
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent action) {
r.play();
}
});
...
另一方面,我建议切换到java 8,以便您可以使用lambda表达式而不是匿名类!