ImageView setImageResource()方法在Runnable()

时间:2016-04-20 16:42:19

标签: java android android-imageview

我面临一个奇怪的问题,我无法理解为什么。

案例1:

Runnable mGen = new Runnable() {
    @Override
    public void run() {

        try {
                //Randomly generate variable i (0 or 1 in this example case)
                imageView[i].setImageResource(R.drawable.firstimage);

                try {
                    Thread.currentThread().sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


        } finally {

            imageView[i].setImageResource(R.drawable.secondimage);
            mHandler.postDelayed(mGen, 500);
        }
    }
};

void startRepeatingTask() {
    mHandler.postDelayed(mRandomGen,500);
}

void stopRepeatingTask() {
    mHandler.removeCallbacks(mGen);
}

在这种情况下,我没有明显看到imageView图像资源被设置为 firstimage

但如果我这样做,

案例2:

Runnable mGen = new Runnable() {
    @Override
    public void run() {

        try {
                if(prevI!=-1)//Don't perform this first time
                      imageView[prevI].setImageResource(R.drawable.secondimage);

                //Randomly generate variable i (0 or 1 in this example case)
                imageView[i].setImageResource(R.drawable.firstimage);

                try {
                    Thread.currentThread().sleep(300);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


        } finally {

            prevI = i;
            mHandler.postDelayed(mGen, 500);
        }
    }
};
void startRepeatingTask() {
    mHandler.postDelayed(mRandomGen,500);
}

void stopRepeatingTask() {
    mHandler.removeCallbacks(mGen);
}

我可以看到两个图像都按预期设置为imageViews。

基本上,我生成一个随机数(0或1,为简单起见),并将imageView设置为某个图像(第一图像),然后返回原始图像(secondimage),并在每个固定间隔重复此操作。 / p>

在第一种情况下,我在线程的同一次运行中进行设置和重置,而在第二种情况下,我在当前运行中重置上一次运行。

案例1 中我的代码有什么问题?如何纠正它?

0 个答案:

没有答案