2011-04-24 51 views
0

我尝试使用Timer在单个ImageView中显示一系列png图像(例如,每1秒更改一次图片)。Android - 使用ImageView显示一系列图像

该应用程序不断崩溃,这是我的代码,请帮助。 在main.xml中有ImageView,出于某种原因,我无法在此发布完整的xml文件。无论如何,它只是一个标准的main.xml,在线性布局中带有额外的ImageView。

public class AniImgTest extends Activity { 

    ImageView iv; 
    public int i=0; 
    Timer timer = new Timer(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     this.iv=(ImageView)findViewById(R.id.imageView1); 
     timer.scheduleAtFixedRate(new TimerTask(){ 
      @Override 
      public void run() { 
       Log.v("","myDebug "+i); 
       if(i<2)  
        i++; 
       else 
        i=0; 

       switch(i){ 
       case 0:iv.setImageResource(R.drawable.a1); 
        break; 
       case 1:iv.setImageResource(R.drawable.a2); 
        break; 
       case 2:iv.setImageResource(R.drawable.a3); 
        break; 
       } 

      } 

    }, 0, 5000); 

    } 
} 
+0

您应该添加堆栈跟踪 – RoflcoptrException 2011-04-24 09:26:38

+0

嗨a380,欢迎来到stackoverflow。您可以添加代码和xml内容,但需要将其标记为代码(请参阅文本编辑框上方的选项栏,或者标记代码/ xml并按Ctrl + k) – MByD 2011-04-24 09:42:54

回答

0

您的任务运行在与主线程不同的线程上,因此它无法更改GUI并导致崩溃。使用handler在主线程上执行这些任务。

一件事(这是没有关系的,但是......),而不是:

if(i<2) 
    i++; 
else 
    i=0; 
switch(i){ 

你可以写:

switch(++i % 3){ 
0

使用的代码块来改变UI组件

 AniImgTest.this.runOnUiThread(new Runnable() { 

      public void run() { 

       // change your image here. 
      } 
     });