我有一系列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);
答案 0 :(得分:0)
{1}}更新应该在UI线程...
上进行参考this回答。 ImageView
在不同的线程上运行,因此您必须使用TimerTask
来更新UI组件。
您确定需要每imgView.post()
更新一次该组件吗?这非常昂贵。
祝你好运。