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