android将一个drawable动态分配给一个imageview

时间:2010-08-21 18:07:15

标签: android

我有一系列drawables,我想通过自己的计时器更改为imageview。 (我尝试使用xml和setBackgroundResource的另一个选项,但不适合我,因为我有图片的hundret并且总是有内存问题,因为它看起来android已经为所有图片同时分配了整个内存。(只是在这个演示中我缩短了它到4张图片)

好的,首先我制作我的阵列

private static int[] draws = {
     R.drawable.frankiearmevor_0001, 
     R.drawable.frankiearmevor_0002, 
     R.drawable.frankiearmevor_0003, 
     R.drawable.frankiearmevor_0002 
 };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    imgView = (ImageView) findViewById(R.id.fredi);

    // create timer        
    Timer updateProgressTimer = new Timer();
    updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            myloop();
        }
    }, 0, 150);
}

int mycounter;
public void myloop()
{
    mycounter++;
    if (mycounter > 4) mycounter = 1;
    imgView.setImageResource(draws[mycounter-1]);
    String hallo; hallo = "now: "+mycounter;
    Log.d("1",hallo);

}

当我只分配一个固定的图像时:imgView.setImageResource(draw [2]); 它显示很好,我看到我的线程记录正常,但当我交换 固定资源将[2]绘制成动态绘制[mycounter-1] ..我只是得到一个黑屏,没有错误,没有。

该做什么,所以我将展示图片:)

THX 克里斯

编辑:8月22日:

我现在尝试了我得到的评论,它编译得很好,但不知怎的,我猜错了..它崩溃了:

    imgView = (ImageView) findViewById(R.id.fredi);

    Timer updateProgressTimer = new Timer();

    updateProgressTimer.scheduleAtFixedRate(new TimerTask() 
    {
        @Override
        public void run() 
        {
            //myloop();
            imgView.post (new Runnable() 
            {

                public void run() 
                {
                    mycounter++;
                    if (mycounter > 10) mycounter = 1;
                    imgView.setImageResource(draws[1]);
                    //imgView.invalidate();
                    String hallo; hallo = "now: "+mycounter;
                    Log.d("1",hallo);
                 }

            });
        }
    }, 0, 150);

1 个答案:

答案 0 :(得分:0)

{1}}更新应该在UI线程...

上进行

参考this回答。 ImageView在不同的线程上运行,因此您必须使用TimerTask来更新UI组件。

您确定需要每imgView.post()更新一次该组件吗?这非常昂贵。

祝你好运。