如何在一定时间间隔后更改imageView上的图片。

17 浏览
0 Comments

如何在一定时间间隔后更改imageView上的图片。

我在Android上有一个问题,我想在ImageView上粘贴图片,并且这些图片在一段时间后会定期更换。也就是说,ImageView中逐个显示一张图片。我正在使用Java中的Thread来做这个,但是我遇到了一些问题,比如Thread没有附加等。请查看下面给出的代码,并告诉我确切的错误以及如何解决该错误,或者给我一些不同的方法来实现这个功能。

package com.ex.thread;
import com.ex.thread.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
public class MyThread extends Activity implements Runnable{
    public static Integer[] mThumbIds = {
       R.drawable.al1,R.drawable.al2,R.drawable.al3,R.drawable.al4,
    };
    Thread th;
    ImageView iv;
    public void run()
    {
        for(int i=0;i<3;i++)
        {
            iv.setImageResource(mThumbIds[i]);
            System.out.println("Sanat Pandey");
            try{
                Thread.sleep(3000);
            }catch(Exception e)
            {
                System.out.println(e);
            }
        }
    }
    public void create()
    {
        Thread th = new Thread(new MyThread());
        th.start();
        try{
            Thread.sleep(3000);
        }catch(Exception e)
        {
            System.out.println(e);
        }
    }
    
    @Override
    public void onCreate(Bundle savedInstace)
    {
        super.onCreate(savedInstace);
        setContentView(R.layout.main);
        create();
    }
}

0
0 Comments

问题出现的原因是需要在ImageView上显示一系列的图片,并且每隔一定时间更换一次图片。

解决方法是通过创建一个线程,在线程中使用循环来遍历图片数组,并且使用runOnUiThread方法在UI线程中更新ImageView的图片资源。

具体代码如下:

public class vv extends Activity {
    int b[] = {R.drawable.a, R.drawable.m, R.drawable.b, R.drawable.j, R.drawable.er, R.drawable.chan, R.drawable.vv};
    public ImageView i;
    int z = 0;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        i = (ImageView) findViewById(R.id.image);
        i.setImageResource(b[0]);
        Thread timer = new Thread() {
            public void run() {
                try {
                    sleep(2000);
                    for (z = 0; z < b.length + 2; z++) {
                        if (z < b.length) {
                            sleep(2000);
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    i.setImageResource(b[z]);
                                }
                            });
                        } else {
                            z = 0;
                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    System.out.println("finally");
                }
            }
        };
        timer.start();
    }
}

以上代码会在ImageView中显示图片数组中的图片,并且每隔2秒钟更换一次图片。

0
0 Comments

问题的原因是在后台线程中不能使用UI线程的内容。解决方法是在主线程中执行相关操作,并且不需要使用后台线程来实现效果。可以在活动中实现这个功能,不需要实现Runnable接口。代码如下所示:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    iv = (ImageView) findViewById(R.id.yourImageViewID);
    int i = 0;
    Runnable r = Runnable(){
        public void run(){
             iv.setImageResource(mThumbIds[i]);
             i++;
             if(i >= mThumbIds.length){
                 i = 0;
             }
             iv.postDelayed(r, 3000); //设置3秒后再次执行
         }
    };
    iv.postDelayed(r,3000); //首次延迟3秒执行
}

问题反馈者称没有产生任何效果,没有显示任何图像,而且调试器也没有运行Runnable接口的run方法。解决方法是使用`new`关键字创建新的对象。

0
0 Comments

是的,我有6个不同的imageView,每个imageView都应该在一定的时间间隔内更换图片。

0