Java 在画布上循环图像
我正在尝试在画布(扩展视图类)中循环图像以创建动画(如GIF动画),但它一直滞后并阻塞我的应用程序 例如:Java 在画布上循环图像,java,android,image,Java,Android,Image,我正在尝试在画布(扩展视图类)中循环图像以创建动画(如GIF动画),但它一直滞后并阻塞我的应用程序 例如: public PlayView(Context context) { super(context); loadFrames(); this.context = context; } protected void onDraw(final Canvas canvas) { canvas_main = canvas;
public PlayView(Context context) {
super(context);
loadFrames();
this.context = context;
}
protected void onDraw(final Canvas canvas) {
canvas_main = canvas;
new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted())
try {
Thread.sleep(10);
time = (time + 1) % 4;
image = images[time];
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
invalidate();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
if (image != null) {
System.out.println("Image is not null!");
if (!right_Clicked) {
canvas_main.drawBitmap(image, width / 2,
height - (image.getHeight() + image.getHeight() / 2),
paint);
}
super.onDraw(canvas_main);
}
void loadFrames() {
res = getResources();
images[0] = BitmapFactory.decodeResource(res, R.drawable.image_1);
images[1] = BitmapFactory.decodeResource(res, R.drawable.image_2);
images[2] = BitmapFactory.decodeResource(res, R.drawable.image_3);
images[3] = BitmapFactory.decodeResource(res, R.drawable.image_4);
}
我如何才能设法循环图像,以便创建一个没有延迟和结巴的动画?这里是一种方法。当您离开活动时,最好也终止线程
Thread mAnimationThread;
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// Not needed canvas_main = canvas;
if (mAnimationThread == null) {
mAnimationThread = new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted())
try {
Thread.sleep(10);
time = (time + 1) % 4;
image = images[time];
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
invalidate();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
mAnimationThread.start();
}
if (image != null) {
if (!right_Clicked) {
canvas.drawBitmap(image, width / 2,
height - (image.getHeight() + image.getHeight() / 2),
paint);
}
}
}
每次绘制视图时都会创建一个新线程。您可能正在创建数千个线程,所有线程都试图绘制图像。因此,我将像往常一样保留此代码,但只删除线程?您需要用于动画的线程。保留对它的引用,检查是否为null,并且只创建一次。你能给我一个代码示例吗?我尝试了我所理解的,但没有成功。无论如何。。。这是在ondraw内完成的。。。太疯狂了!您应该只覆盖draw方法