Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android为imageview分配一个可绘制的动态视图_Android - Fatal编程技术网

android为imageview分配一个可绘制的动态视图

android为imageview分配一个可绘制的动态视图,android,Android,我有一个可绘制的数组,我想通过自己的计时器将其更改为imageview。 (我用xml和setBackgroundResource尝试了另一个选项,但不适用于我,因为我有数百张图片,总是出现内存问题,因为看起来android已经一次性为所有图片分配了全部内存。(在本演示中,我将其缩短为4张图片) 好的,首先我制作我的数组 private static int[] draws = { R.drawable.frankiearmevor_0001, R.drawable.fra

我有一个可绘制的数组,我想通过自己的计时器将其更改为imageview。 (我用xml和setBackgroundResource尝试了另一个选项,但不适用于我,因为我有数百张图片,总是出现内存问题,因为看起来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(draws[2]); 它显示的很好,我也看到我的线程记录的很好,但是当我交换 固定资源将[2]绘制为动态绘制[mycounter-1]…我只得到一个黑屏,没有错误,什么都没有

要做什么,所以我将显示图像:)

thx 克里斯

编辑: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);

ImageView
更新应该发生在UI线程上

参考答案。
TimerTask
运行在不同的线程上,因此必须使用
imgView.post()
来更新UI组件

是否确实需要每隔
150ms
更新组件?那很贵


祝你好运。

谢谢。。。我会试试。。。这是一部动画。。。因此,是的,我需要经常更新,以使其平滑