Android-使用ImageView显示一系列图像

发布于 2024-11-03 05:49:49 字数 1129 浏览 4 评论 0原文

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

该应用程序不断崩溃,这是我的代码,请帮忙。 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);

    }
} 

I try to display series of png images in a single ImageView using Timer (e.g. change pic every 1 sec.).

The app keep crashing, Here is my code, please help.
There is ImageView in the main.xml , for some reason i cant post the full xml file here. Anyway it just a standard main.xml with extra ImageView within the Linear Layout.

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);

    }
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红颜悴 2024-11-10 05:49:49

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

还有一件事(不相关,但是......),而不是:

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

你可以写:

switch(++i % 3){

Your task is running on a different thread than main thread, so it can't change the GUI and causes crashes. Use handler to perform those tasks on the main thread.

One more thing (which is not related, but...), instead of:

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

you can write:

switch(++i % 3){
浅浅淡淡 2024-11-10 05:49:49

使用此代码块来更改 UI 组件

     AniImgTest.this.runOnUiThread(new Runnable() {

            public void run() {

                // change your image here.
            }
        });

use this block of code to change UI components

     AniImgTest.this.runOnUiThread(new Runnable() {

            public void run() {

                // change your image here.
            }
        });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文