Android 沿主屏幕过渡更改图像

Android 沿主屏幕过渡更改图像,android,live-wallpaper,Android,Live Wallpaper,我正在尝试创建一个简单的LiveWallper,它可以在主屏幕幻灯片上播放图像。 所以我写了这段代码。它在一些设备中工作,但在一些设备中出现内存不足错误。 我知道保存几个大图像需要大量内存。 有人有办法解决这个内存不足的问题吗 void drawFrame() { SurfaceHolder holder = getSurfaceHolder(); Canvas c; if(mScreenNo < 1 || isPreview() || offsetOK == f

我正在尝试创建一个简单的LiveWallper,它可以在主屏幕幻灯片上播放图像。
所以我写了这段代码。它在一些设备中工作,但在一些设备中出现内存不足错误。
我知道保存几个大图像需要大量内存。

有人有办法解决这个内存不足的问题吗

void drawFrame() {
    SurfaceHolder holder = getSurfaceHolder();
    Canvas c;
    if(mScreenNo < 1 || isPreview() || offsetOK == false){
        Log.d("drawFrame","mScreenNo < 1 || isPreview()");
        c = holder.lockCanvas();
        c.drawBitmap(bg_I, 0, bgY, p);
    }else{
    float bg_w = bg_I.getWidth();
    Float[] bg_x = new Float[mScreenNo +1];

    for(int i=0; i < bg_x.length; i++){
        bg_x[i] = bgX + bg_w * i;
    }

        c = holder.lockCanvas();

    Log.d("draw"," bgX="+bgX);

    for(int i=0; i < bg_x.length; i++){
        switch(i%3){
        case 0:
        c.drawBitmap(bg_I, bg_x[i], bgY, p);
        break;
        case 1:
        c.drawBitmap(bg_II, bg_x[i], bgY, p);
        break;
            case 2:
        c.drawBitmap(bg_III, bg_x[i], bgY, p);
        break;
            }
    }
    }

    holder.unlockCanvasAndPost(c);
    handler.removeCallbacks(drawThread);
    if (visible)
    handler.postDelayed(drawThread, 25);
    }
    }
我需要你的帮助

等待你的好主意。谢谢。

我刚刚自己解决了这个问题。 也许这是一个愚蠢的解决方法,但它现在运行良好

我解决问题的方法就是修改for循环,如下所示:

    for(int i=0; i < bg_x.length; i++){
    if(-bg_w < bg_x[i]&& bg_x[i] <= bg_w){
        Log.d("drawFrame","draw this time");
        switch(i%3){
        case 0:
            c.drawBitmap(bg_I, bg_x[i], bgY, p);
            break;
        case 1:
            c.drawBitmap(bg_II, bg_x[i], bgY, p);
            break;
        case 2:
            c.drawBitmap(bg_III, bg_x[i], bgY, p);
            break;
        }
    }else{
        Log.d("drawFrame","no draw this time");
    }
}
for(int i=0;i    for(int i=0; i < bg_x.length; i++){
    if(-bg_w < bg_x[i]&& bg_x[i] <= bg_w){
        Log.d("drawFrame","draw this time");
        switch(i%3){
        case 0:
            c.drawBitmap(bg_I, bg_x[i], bgY, p);
            break;
        case 1:
            c.drawBitmap(bg_II, bg_x[i], bgY, p);
            break;
        case 2:
            c.drawBitmap(bg_III, bg_x[i], bgY, p);
            break;
        }
    }else{
        Log.d("drawFrame","no draw this time");
    }
}