如何在一定时间间隔后更改imageView上的图片。
如何在一定时间间隔后更改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(); } }
问题出现的原因是需要在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秒钟更换一次图片。
问题的原因是在后台线程中不能使用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`关键字创建新的对象。