java在循环中更改位图图像
我有一个画布,我希望每50毫秒更改一次位图图像
基本上我想做的是一个gif动画
如你所见,有4个图像,每50毫秒我希望它改变图像
下面的代码不起作用,我不知道为什么
protected void onDraw(final Canvas canvas) {
res = getResources();
image = BitmapFactory.decodeResource(res, R.drawable.image_1);
canvas.drawBitmap(image, 0, 0, paint);
new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted())
try {
Thread.sleep(50);
System.out.println("OK2");
time++;
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
if (time == 1) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_1);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time == 2) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_2);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time == 3) {
image = BitmapFactory.decodeResource(res,
R.drawable.image_3);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
if (time >= 4) {
time = 0;
image = BitmapFactory.decodeResource(res,
R.drawable.image_4);
canvas.drawBitmap(image, 0, 0, paint);
invalidate();
}
}
});
} catch (InterruptedException e) {
}
}
}).start();
super.onDraw(canvas);
}
提前谢谢
# 1 楼答案
有几个问题:
您每次都在反复解码资源
decodeResource
可能不够快,无法在50毫秒内加载映像。将帧解码一次并将其存储在阵列中会更快。e、 g:每次调用
onDraw()
时都会启动一个新线程,这意味着将创建数百个线程。相反,您应该只创建一次线程。在线程内部,增加计数器并将image
设置为正确的帧,然后调用invalidate:然后在
onDraw()
内,将当前图像绘制到画布上:# 2 楼答案
您可以使用此链接here。这是用于滑动图像的
在onCreate方法中调用此函数