我环顾四周,但我不太确定这将如何工作,并且唯一与我正在寻找的内容非常接近的线程有 404 信息。
在一项活动中,我布置了四张图片。我希望他们每 15 秒更改一次不同的图像,然后我会跟踪哪个图像在那里让他们链接到另一个活动。我有线程工作并发布到System.out.println()
,但 UI 没有改变,我不知道如何允许它。这是我到目前为止所拥有的。
public int curImage1 = 1;
public int curImage2 = 2;
public int curImage3 = 3;
public int curImage4 = 4;
onCreate()
方法:
// ...
imagesHandler = new Handler();
startImageSwapping();
Runnable swapImages = new Runnable() {
@Override
public void run() {
handleUpdates();
imagesHandler.postDelayed(swapImages, 3000);
}
};
public void handleUpdates() {
if (curImage1 == 1) {
((ImageView) findViewById(R.id.main_image_1)).setImageDrawable(
getResources().getDrawable(R.drawable.logo));
curImage1 = 5;
}
if (curImage1 == 5) {
((ImageView) findViewById(R.id.main_image_1)).setImageDrawable(
getResources().getDrawable(R.drawable.main_image_1));
curImage1 = 1;
}
System.out.println("TEST");
}
public void startImageSwapping() {
imageThreadIsRunning = true;
swapImages.run();
}
public void stopImageSwapping() {
imagesHandler.removeCallbacks(swapImages);
imageThreadIsRunning = false;
}
应用更改后的当前代码。仍然没有这样做,但希望为遇到它的其他人更新这篇文章。
Runnable swapImages = new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (curImage1 == 1) {
((ImageView) findViewById(R.id.main_image_1)).setImageDrawable(
getResources().getDrawable(R.drawable.logo));
curImage1 = 5;
}
if (curImage1 == 5) {
((ImageView) findViewById(R.id.main_image_1)).setImageDrawable(
getResources().getDrawable(R.drawable.main_image_1));
curImage1 = 1;
}
System.out.println("TEST");
}
});
imagesHandler.postDelayed(swapImages, 3000);
}
};
public void startImageSwapping() {
imageThreadIsRunning = true;
swapImages.run();
}
public void stopImageSwapping() {
imagesHandler.removeCallbacks(swapImages);
imageThreadIsRunning = false;
}
@Override
protected void onDestroy() {
stopImageSwapping();
super.onDestroy();
}
@Override
protected void onPause() {
stopImageSwapping();
super.onPause();
}
@Override
protected void onStop() {
stopImageSwapping();
super.onStop();
}
@Override
protected void onStart() {
if (!imageThreadIsRunning)
startImageSwapping();
super.onStart();
}
@Override
protected void onResume() {
if (!imageThreadIsRunning)
startImageSwapping();
super.onResume();
}