是否可以动态更改ImageView的图像?

时间:2015-02-18 15:15:50

标签: android

这是我的java代码我是如何实现的。

    new Thread(new Runnable() {
        public void run() {
            int count=0;
            while (true) {
                if(count>5)
                    count=0;
                try {

                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                   System.out.println(""+e);
                }

                ImageView image = (ImageView) findViewById(R.id.slider);
                image.setImageResource(pics[count]);
                count++;
            }
        }
    }).start();

我创建了一个单独的Thread来动态更改图片

3 个答案:

答案 0 :(得分:2)

那是因为你试图从不同于UI线程的线程设置图片。并且您只能从UI线程更改UI。

final ImageView image = (ImageView) findViewById(R.id.slider);
image.post(new Runnable() {
            @Override
            public void run() {
                image.setImageResource(pics[count]);
            });

这会将您的更改发布到UI线程的队列中。

答案 1 :(得分:1)

您可以使用处理程序的postDelayed方法

来实现它
 public class MyRunnable implements Runnable {
    private ImageView imageView;
    private boolean exit = false;
    public MyRunnable(ImageView n) {
        imageView = n;
    }  

    private void setExit() {
        exit = true;
    }

    @Override
    public void run() {
        if (exit) {
            imageView.removeCallbacks(null);
            imageView = null;
            return;
        }
        imageView.setImageResource(pics[count++%5]);
        imageView.postDelayed(this, 1000);
    }
}

宣布成员:

 MyRunnable mRunnable = null;

onResume

 ImageView image = (ImageView) findViewById(R.id.slider);
 image.postDelayed(mRunnable = new MyRunnable(image), 1000);

和onPause电话

 mRunnable.setExit();

答案 2 :(得分:0)

或者您可以将图像放入Drawable中,然后使用

  

ImageView.setImageResource(int resId)

没有尝试但应该可以正常工作