Android: 按照时间间隔更改图像

8 浏览
0 Comments

Android: 按照时间间隔更改图像

我正在使用ImageDownloader类从服务器获取图片,并使用ArrayList获取这些图片的链接。下载图片后,我将其设置为布局的background。一切都正常,但是我想在特定的时间间隔后更改这些图片,并设置不同的图片作为背景。我在这里阅读了很多帖子,但没有得到我想要的结果。由于我在ArrayList中有所有的图片链接,所以我应该如何设置一个计时器来更改从ArrayList中获取的图片呢?即使我设置了一个计时器,它总是显示索引0处的第一张图片,同样的图片又再次显示出来?如果有人有任何代码示例,请帮助我查看我的代码需要做哪些更改。

final ImagesSerialized item;
final ImageView bgImage=(ImageView) findViewById(R.id.image);
ArrayList list;
control = (Controller) getApplicationContext();
list = (ArrayList) control.Table_Images.GetData();
for(int i=0; i

0
0 Comments

问题的原因是在循环中,每次都会调用runOnUiThread()方法,导致图片的更换没有间隔时间。

解决方法是使用Handler类实现定时任务,在定时任务中更换图片。

代码如下所示:

final ImagesSerialized item;
final ImageView bgImage=(ImageView) findViewById(R.id.image);
ArrayList<ImagesSerialized> list;
control = (Controller) getApplicationContext();
list = (ArrayList<ImagesSerialized>) control.Table_Images.GetData();
final Handler handler = new Handler();
final int delay = 2000; // 设置时间间隔,单位为毫秒
Runnable runnable = new Runnable() {
    int i = 0;
    public void run() {
        item = list.get(i);
        downloader = new ImageDownloader();
        downloader.download(item.imageurl(), bgImage);
        i++;
        if (i >= list.size()) {
            i = 0;
        }
        handler.postDelayed(this, delay);
    }
};
handler.postDelayed(runnable, delay);

0
0 Comments

问题原因:需要在Android应用中实现定时更换图片的功能。

解决方法:可以使用TimerTask来实现。

首先,需要在布局文件中设置ImageView的属性,如下所示:


然后,在代码中进行一些声明和初始化操作,如下所示:

List mImageUrl = new ArrayList();
private ImageLoader mImageLoader = new ImageLoader(MainActivity.this);
Timer timer = new Timer();
int i = 0;

接下来,在onCreate方法中添加以下代码:

timer.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        if (i < mImageUrl.size()) {
            runOnUiThread(new Runnable() {
                public void run() {
                    mImageLoader.DisplayImage(mImageUrl.get(i), img);
                    i++;
                }
            });
        } else {
            i = 0;
        }
    }
}, 0, 2000);

这段代码会在0秒开始执行,并且每2秒更换一次图片。您可以根据需要调整时间间隔。

以上代码已经经过测试,可以正常工作。

如果想了解更多关于TimerTask的信息,可以点击[这里](http://developer.android.com/reference/java/util/TimerTask.html)。

另外,如果需要取消定时器,可以使用

timer.cancel()

方法。

0
0 Comments

问题的出现原因:用户想要在Android应用中实现定时更换图片的功能,但不清楚如何实现。

解决方法:

1. 首先,用户可以使用Android中的ImageView组件来实现定时更换图片的功能。通过在该组件上调度一个定时器即可实现,而无需引入其他对象。

代码如下:

final ImageView bgImage=(ImageView) findViewById(R.id.image);
...
new Runnable() {
    int updateInterval = 1000; // 每隔1秒执行一次
    public void run() {
        // 在这里写需要执行的代码,每隔updateInterval时间会执行一次  
        // 在这里更换背景图片
        bgImage.postDelayed(this, updateInterval);
    }
}.run();

2. 如果用户想要停止定时器,可以在Runnable中添加一个停止方法。这个停止方法是同步的,不会导致定时器内部代码的不一致性。

代码如下:

Runnable myRunnable = new Runnable() {
    int updateInterval = 1000; // 每隔1秒执行一次
    boolean stop = false;
    public void stop() {
        this.stop = true;
    }    
    public void run() {
        // 在这里写需要执行的代码,每隔updateInterval时间会执行一次  
        // 在这里更换背景图片
        if(!stop) {
            bgImage.postDelayed(this, updateInterval);
        }
    }
}.run();

现在可以通过myRunnable.stop();来停止定时器。

3. 如果用户想要按照一定的时间间隔循环遍历URL数组,并将其中的一个URL传递给下载器进行下载并设置为背景图片,可以使用以下代码片段实现:

int arraySize = list.size();
new Runnable() {
    int currentIndex = 0;
    int updateInterval = 1000; // 每隔1秒执行一次
    public void run() {
        currentIndex += 1;
        if(currentIndex == arraySize){
            currentIndex = 0;
        }
        item = list.get(currentIndex);       
        downloader.download(item.imageurl(), bgImage);            
        bgImage.postDelayed(this, updateInterval);
    }
}.run();

用户在服务器上使用ArrayList获取图片URL,然后使用一个对象来访问这些URL。现在的问题是如何按照一定的时间间隔逐个更改这些URL,并将它们传递给下载器方法,该方法会下载图片并将其设置为传递给它的视图的背景。用户希望了解如何在这种情况下使用线程。

用户在这行代码中遇到了问题:downloader.download(item.imageurl(), bgImage);,其中item.imageurl()是一个字符串,用户想要逐个传递索引值。

最后,用户感谢对方在解决问题时花费的时间。

0