我正在使用
ImageDownloader类从服务器获取图像并使用ArrayList获取这些图像链接.下载图像后,我将图像设置为布局的背景.一切正常,但我想在特定的时间间隔后更改这些图像并将其设置为背景不同的图像.我在这里经历了很多帖子,但没有得到我想要的东西.由于我在ArrayList中有所有的图像链接,所以如何设置一个计时器来更改来自该ArrayList的图像.它总是显示我在索引零处的第一个图像,即使我已经设置了一个计时器,但同样的图像再次显示?如果有人有任何代码示例,请帮助我,看看我的代码在那里改变什么?
final ImagesSerialized item; final ImageView bgImage=(ImageView) findViewById(R.id.image); ArrayList<ImagesSerialized> list; control = (Controller) getApplicationContext(); list = (ArrayList<ImagesSerialized>) control.Table_Images.GetData(); for(int i=0; i<list.size(); i++) { item = list.get(i); } downloader = new ImageDownloader(); downloader.download(item.imageurl(),bgImage);
解决方法
我不知道ImageLoader组件,但在Android上调度计时器非常容易.(没有任何额外的对象)
final ImageView bgImage=(ImageView) findViewById(R.id.image); ... new Runnable() { int updateInterval = 1000; //=one second @Override public void run() { // Any code which goes here will be executed every 'updateInterval' // change your background here bgImage.postDelayed(this,updateInterval); } }.run();
您可以根据需要更改此模板,假设我想要停止此计时器,为此我必须向runnable添加一个stop方法(此stop方法同步并且不会导致计时器内部代码不一致):
Runnable myRunnable = new Runnable() { int updateInterval = 1000; //=one second boolean stop = false; public void stop() { this.stop = true; } @Override public void run() { // Any code which goes here will be executed every 'updateInterval' // change your background here if(!stop) { bgImage.postDelayed(this,updateInterval); } } }.run();
现在我可以通过myRunnable.stop()来阻止它;
编辑:
您应该迭代您的URL数组并将其中一个传递给您的下载程序.它可以通过以下代码段完成:
int arraySize = list.size(); new Runnable() { int currentIndex = 0; int updateInterval = 1000; //=one second @Override public void run() { currentIndex += 1; if(currentIndex == arraySize){ currentIndex = 0; } item = list.get(currentIndex); downloader.download(item.imageurl(),bgImage); bgImage.postDelayed(this,updateInterval); } }.run();