ホーム画面のスライドで画像をスライドさせるシンプルなライブ壁紙を作成しようとしています。
だから私はこのコードを書きました。一部のデバイスでは機能しましたが、いくつかのデバイスでメモリ不足エラーが発生しました。
いくつかの大きな画像を保持するには、多くのメモリが必要であることを知っています。
誰かがこのメモリ不足の問題を解決する考えを持っていますか?
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);
}
}
onOffsetChanged で、私はこれが好きです。
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xStep,
float yStep, int xPixels, int yPixels) {
mXoffset = xOffset;
mXStep = xStep;
mXPixels = xPixels;
mScreenNo = (int)(1/mXStep);//Number of screens(-1)
mPageNo = (int)(mXoffset / mXStep);//current screen page(the first page is 0)
mWallStep = getWallpaperDesiredMinimumWidth()/2 /mScreenNo;
float mwall_screen = rescale.getScreenWidth() / mWallStep;
bgX = mXPixels * mwall_screen;
offsetOK = true;
}
あなたの助けが必要です!
あなたの素晴らしいアイデアを待っています。ありがとうございました。