gpt4 book ai didi

java - 以特定时间间隔更改背景图像

转载 作者:行者123 更新时间:2023-11-29 05:30:02 26 4
gpt4 key购买 nike

我正在尝试开发一个背景每 5 秒更改一次的 android 应用程序,我编写了如下代码:

public class BgView extends Activity implements Runnable {
ImageView img;
int [] setImg = {R.drawable.one,R.drawable.two};
RelativeLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bg_view);
layout = (RelativeLayout) findViewById(R.id.first);
Thread t = new Thread(new BigView);
t.start();

}

@Override
public void run() {
for (int i = 0; i < 2; ++i) {
layout.setBackgroundResource(setImg[i]);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

它编译得很好,但是当我试图在模拟器中运行它时,它在 5 秒后停止,在 logcat 中我看到一个异常,它说我不能从其他函数或类似的东西触摸 Activity 类 View .

所以我将整个 for 循环 放在 onCreate() 方法中,现在我没有得到任何异常,但我看到的只是一个空白屏幕,持续 5 秒,然后我得到最后一张图像

我知道这个问题已被重复,但我只是不想复制粘贴代码...我想知道为什么会发生这种情况以及我们如何以最少的更改使其工作


编辑 :我得到以下异常: E/AndroidRuntime(904): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建 View 层次结构的原始线程才能触及它的 View 。
我想知道为什么将整个 for 循环放在 onCreate() 方法中不起作用

最佳答案

只有 UI 线程可以/应该更新 UI View ,在您的代码中,您试图直接从新线程更新 View 。

您应该在您的 Activity 中创建一个处理程序,然后在需要的时间间隔从您的线程中调用它。然后处理程序应该更新 UI。试试代码(我没有编译代码,只是输入它所以可能有拼写错误/错误)

public class BgView extends Activity implements Runnable {
ImageView img;
final int [] setImg = {R.drawable.one,R.drawable.two};
RelativeLayout layout;

interface MyHandler {
void letMeKnow(int i);
}
private MyHandler handler = new MyHandler(){

@Override
void letMeKnow(int i){
layout.setBackgroundResource(setImg[i]);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bg_view);
layout = (RelativeLayout) findViewById(R.id.first);
Thread t = new Thread(new BigView);
t.start();

}

@Override
public void run() {
for (int i = 0; i < 2; ++i) {
handler.letMeKnow(i);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

} `

关于java - 以特定时间间隔更改背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com