Android - 在几秒后在运行时更改图像视图源

13 浏览
0 Comments

Android - 在几秒后在运行时更改图像视图源

以下代码是我的应用程序中的闪屏屏幕。我需要的是当活动加载时,默认显示图像,然后几秒钟后在同一活动中将图像更改为另一个图像。我有另一张与第一张不同颜色的图像。我希望在几秒钟后为该图像更改屏幕。我在我的代码中这样做了。

但问题是程序在执行线程时停止,显示以下错误信息:“android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.”

如何实现这个目标?有人能帮我解决这个问题吗?我是一个新手,对Android开发不熟悉。谢谢。

0
0 Comments

Android - Change the Image View Source at run time after few seconds这个问题的出现的原因是由于Android中不能在工作线程中访问和更新UI,只能在UI线程中访问UI。如果需要在后台线程中更新UI,可以使用Handler来实现。解决方法是在Handler中使用postDelayed方法延迟一段时间后更新UI的内容。

具体的解决方法如下所示:

首先,在布局文件中定义一个ImageView控件,并设置初始的图片资源为your_first_image。

然后,在Activity中获取ImageView控件的引用,并设置初始的图片资源。

接着,创建一个Handler对象,并在其中定义一个Runnable对象,用于更新UI。

然后,创建一个线程,用于延迟一段时间后执行更新UI的操作。

在线程的run方法中,通过调用Handler的post方法,将更新UI的任务添加到UI线程的消息队列中。

最后,在Runnable对象的run方法中,调用ImageView的setImageResource方法,将图片资源设置为your_second_image_view。

完整的代码如下所示:

this.imgBus = (ImageView) findViewById(R.id.splashImageView);
imgBus.setImageResource(R.drawable.your_first_image);
this.handler = new Handler();
introSound = MediaPlayer.create(SplashTestForSO.this, R.raw.enginestart);
introSound.start();
Thread timer = new Thread(){
    public void run(){
        try{
           sleep(2000);
            YourActivity.this.handler.post(runnable);  
          sleep(1000);
        } catch (InterruptedException e) {              
            e.printStackTrace();
        }finally{
        }
    }
};
timer.start();
this.runnable = new Runnable() {
    public void run() {
        //call the activity method that updates the UI
        YourActivity.this.imgBus.setImageResource(R.drawable.your_scond_image_view);
    }
};

通过以上方法,我们可以在Android中实现在延迟一段时间后更新ImageView的图片资源的效果。

0
0 Comments

问题出现的原因是希望在应用程序启动后的几秒钟内更改ImageView的图片源。为了解决这个问题,可以使用ImageView的Handler和Runnable。Handler是Android特有的调度程序,可以在UI线程上运行。具体解决方法如下:

ImageView imgBus;
MediaPlayer introSound, bellSound;
Runnable swapImage = new Runnable() {
    public void run() {
        imgBus.setImageResource(R.drawable.bluekbus);
    }
};

在onCreate()方法中调用:

imgBus = (ImageView) findViewById(R.id.imgBus);
imgBus.setImageResource(R.drawable.blackbus);
imgBus.postDelayed(swapImage, 3000);  // Add me!

需要注意的是,闪屏屏幕在Android中是不被提倡的,因为应该尽快启动应用程序(同时在后台加载较慢的元素)。然而,有时候稍微延迟是不可避免的。

0
0 Comments

问题的原因是在Android中,必须在UI线程中更新用户界面。在这个问题中,设置了一个ImageView的资源,但是在非UI线程中进行了更新操作,导致出现了问题。

解决方法是使用runOnUiThread()方法,将更新操作放在UI线程中执行。具体操作是在finally块中添加以下代码:

runOnUiThread(new Runnable() {
        public void run() {
                     SplashScreen.class.img.setImageResource(R.drawable.bluekbus);
                }
            });

这样,就可以确保在UI线程中更新ImageView的资源,避免出现问题。

0