ゲームの背景画像といくつかの小さな画像を読み込んで Canvas に配置し、オーバーレイされた小さな画像 (移動、回転など) をユーザーが操作できるようにしようとしています。
縦横比 (たとえば 5:3) を維持するために、画像をビットマップとして読み込んで、自分でサイズを変更してみました。アイデアは、キャンバスの幅/高さに応じて背景のトリミング/レターボックス化を行い、小さな画像のサイズの正しい比率を維持することでした.
Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), resourceImg);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg2, 0, 0, width, height, matrix, true);
タブレット/電話に対応するために、1600x1000 および 200kb の背景 PNG 背景画像があります。
ただし、サイズを変更しようとするとビットマップが 1600x1000x4byte=6.4 MB の RAM になるため、メモリ不足の問題に苦しんでいます。(これらの問題が発生した時点でエミュレータを使用しています)
canvas.setBackgroundResource を使用するように変更することにしました
SceneCanvas sceneCanvas = (SceneCanvas) findViewById(R.id.the_canvas);
sceneCanvas.setBackgroundResource(R.drawable.my_scene_1600x900);
これはうまく機能しますが、画面全体に表示され、縦横比が維持されません。
アスペクト比を維持して背景を設定する方法はありますか? または、間違ったルートを完全に下っただけで、OutOfMemoryの問題を回避するために、ImageViewsを使用してキャンバスにレンダリングする必要があります