Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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
Java 在画布上循环图像_Java_Android_Image - Fatal编程技术网

Java 在画布上循环图像

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;

我正在尝试在画布(扩展视图类)中循环图像以创建动画(如GIF动画),但它一直滞后并阻塞我的应用程序

例如:

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方法