【发布时间】:2017-03-08 15:59:37
【问题描述】:
我正在开发一个简单的 2D Android 游戏,我想在关卡开始时绘制每个关卡的背景。每个关卡的背景都是静态的,不会动画或移动。
起初,我使用画布在自定义视图中绘制背景,并将该视图加载为关卡的背景。这很有效,但是我注意到如果我画了很多线条和形状,UI 就会开始卡顿。我通过画布绘制背景并将其直接保存到位图中解决了这个问题,然后我将其加载到背景ImageView 中,如下所示:
CustomView bgView = new CustomView(this); //this view draws the background
Bitmap bitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
bgView.draw(canvas);
ImageView imageViewBg = (ImageView) findViewById(R.id.imageViewBg);
imageViewBg.setImageBitmap(bitmap);
我注意到这种方法的问题是我正在创建一个大小为 [screenWidth x screenHeight] 的位图,这可能会导致 OutOfMemoryError。
那么,绘制全屏游戏背景的最佳方法是什么?问题是我想动态绘制它,我不能直接从资产中加载它。 (我可以使用Bitmap.Config.RGB_565 配置文件,但它仍然只会将位图的大小减半,这不是最佳解决方案。
【问题讨论】:
标签: android bitmap out-of-memory android-canvas 2d-games