Android:在没有锁定UI的情况下在for循环中更改图像

时间:2012-02-02 16:19:34

标签: android

这是我的代码。

for(int k=1 ; k<=1000; k++)
{
    if((k%2)==0)
        i.setImageResource(R.drawable.barbie2);
    else
        i.setImageResource(R.drawable.barbie3);

    try {
        Thread.sleep(1000);
    } catch(InterruptedException e) {
    } 
}

我希望每1秒交换两个图像而不锁定UI。 我怎么能在android中帮助我。

3 个答案:

答案 0 :(得分:4)

通过这种方式在单独的线程中完成:

    new Thread(new Runnable() {
        @Override
        public void run() {
            for(int k=1 ; k<=1000; k++)
            {
                if((k%2)==0)
                    i.post(new Runnable() {
                        @Override
                        public void run() {
                            i.setImageResource(R.drawable.barbie2);
                        }
                    });

                else
                    i.post(new Runnable() {
                        @Override
                        public void run() {
                            i.setImageResource(R.drawable.barbie3);
                        }
                    });


                try {
                    Thread.sleep(1000);
                    } catch(InterruptedException e) {
                    } 
            }
        }
    }).start();

如果可能,请将您的图片i定义为final

答案 1 :(得分:2)

遵循其javadoc的建议:

http://developer.android.com/reference/android/widget/ImageView.html#setImageResource(int

这会在UI线程上执行 位图读取和解码,这会导致延迟打嗝 。如果这是一个问题,请考虑改为使用setImageDrawable(android.graphics.drawable.Drawable)setImageBitmap(android.graphics.Bitmap)BitmapFactory

答案 2 :(得分:1)

使用Handlers