首页 > 解决方案 > 当应用程序在运行模式下启动时,Canvas 对象为空,而在调试模式下运行时对象具有值

问题描述

我使用画布对象设置 drawbitmap 以设置壁纸更改它基于 > 用户选择的时间间隔。当应用程序在运行模式下启动并且在调试模式下它不为空时,Canvas 对象为空。下面是我的代码非常奇怪的行为

    public MyWallpaperEngine() {
        mImagesArray = new int[] {R.drawable.one,R.drawable.two,R.drawable.three,
                R.drawable.four,R.drawable.five,R.drawable.six,
                R.drawable.seven,R.drawable.eight,R.drawable.nine,
                R.drawable.ten};

        myTimertask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("TIMER SCHEDULED INSIDE RUN");
                drawFrame();
                incrementCounter();
            }
        };
        myTimer.schedule(myTimertask,startInterval,WALLPAPER_DURATION);
    }

    private void incrementCounter() {
        mImagesArrayIndex++;

        if (mImagesArrayIndex >= mImagesArray.length) {
            mImagesArrayIndex = 0;
        }
    }

    private void drawFrame() {
        System.out.println("inside draw frame");
         SurfaceHolder holder = getSurfaceHolder();
        System.out.println("holder Object "+holder);
        Canvas canvas = null;

        try {
            canvas = holder.lockCanvas();
            System.out.println("Canvas Object "+canvas);
            if (canvas != null) {
                System.out.println("inside draw image");
                drawImage(canvas);
            }
        } finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        }
    }

    private void drawImage(Canvas canvas)
    {
        Bitmap image = BitmapFactory.decodeResource(getResources(),
                mImagesArray[mImagesArrayIndex]);
        Bitmap b=Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), true);
        canvas.drawBitmap(b, 0,0, null);
    }

标签: androidbitmapandroid-canvaslive-wallpaperandroid-wallpaper

解决方案


什么时候调用你的 drawImage 方法?(来自活动/片段生命周期)。

您无法在运行时接收的原因可能是因为您的视图尚未完全绘制在放置画布对象的屏幕上。

您的画布在调试模式下不为空,因为调试模式较慢并且它有足够的时间来绘制。

确保遵循活动/片段生命周期。


推荐阅读