我正在努力完成一些非常简单的事情。首先,加载我的布局(main.xml)。然后等待1秒钟,修改图像,等待1秒钟并将其修改为第三张图像。 (当然,我的最终目标更复杂,但我甚至无法让它发挥作用)。
基本上,当应用加载时,我会出现黑屏。它一直保持这种状态直到所有等待结束,然后显示最终图像。这是我的代码:
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageCard[0] = (ImageView)findViewById(R.id.imageView11);
Thread.sleep(1000);
ImageCard[0].setImageDrawable(getResources().getDrawable(R.drawable.secondimage));
Thread.sleep(1000);
ImageCard[0].setImageDrawable(getResources().getDrawable(R.drawable.thirdimage));
ImageCard [0]是我想要改变的图像。它在main.xml中加载,如果删除其余代码,则显示正常。
如果我将睡眠时间更改为5000,则需要10秒才能最终离开黑屏并显示第三张图像。这就是我所知道的不仅仅是加载缓慢,而是它实际上正在等待。
就好像它没有按顺序运行。我不是java专家,所以我假设我做的事情很蠢......
感谢您的帮助!
答案 0 :(得分:3)
我认为你阻止了UI Thead。在静态处理程序对象上尝试Handler.postDelayed。
答案 1 :(得分:2)
好的继承你的问题,当你在UIThread时,你永远不能睡觉(...)。 UIThread永远不会被锁定,它会导致很多非常糟糕的事情发生在android中。但是有一个非常简单的方法,只需要离开UIThread并在需要时跳回它。以下是我的建议:
public void onCreate(...)
{
super.onCreate(...);
myActivity.setContentView(R.layout.main);
new Thread(this).start();
}
public void run()
{
try
{
changeLayout(R.layout.main2);
Thread.sleep(5000);
changeLayout(R.layout.main3);
Thread.sleep(10000)
changeLayout(R.layout.main4);
}catch(Exception e){}
}
public void changeLayout(int id)
{
this.id = id;
myActivity.post(new Runnable()
{
public void run()
{
myActivity.setContentView(id);
}
});
}
private int id;
当然,使用此示例,您的类必须实现Runnable才能工作。只有UIThread可以访问UI,没有其他线程可以访问。这就是你必须跳上UIThread的原因。希望这有效!
答案 2 :(得分:0)
尝试在想要绘制时添加ImageCard [0] .invalidate()。
答案 3 :(得分:0)
我认为Hovercraft Full of Eels正在指向正确的方向。基本上,你没有做任何多线程,你告诉主线程等待,这意味着它永远不会完成绘图。我不确定Android,但Swing默认使用双缓冲(以避免屏幕闪烁),但这意味着绘制的内容实际上是绘制到缓冲区,而不是窗口本身,这就是为什么你没有什么都看见您可以尝试禁用双缓冲(Android可能使用),但这可能会导致其他问题。
你可能想要实际进行多线程,或者,我确信Android可能有一个Timer组件。如果是这样,我建议你使用Thread.sleep或实际的多线程。使用计时器,您可以让它在一秒钟后触发事件。该事件将执行其他代码。
答案 4 :(得分:0)
你在构造函数或init()函数中有那些代码吗?如果是,则只绘制第一张图片,并在调用构造函数或init()函数的位置之后移动Thread.sleep()函数。 然后调用repaint()函数或其他东西。