我像这样创建 14 个位图对象:
bmp[0]=BitmapFactory.decodeResource(getResources(), R.drawable.a0000);
bmp[1]=BitmapFactory.decodeResource(getResources(), R.drawable.a0001);
bmp[2]=BitmapFactory.decodeResource(getResources(), R.drawable.a0002);
bmp[3]=BitmapFactory.decodeResource(getResources(), R.drawable.a0003);
bmp[4]=BitmapFactory.decodeResource(getResources(), R.drawable.a0004);
bmp[5]=BitmapFactory.decodeResource(getResources(), R.drawable.a0005);
bmp[6]=BitmapFactory.decodeResource(getResources(), R.drawable.a0006);
bmp[7]=BitmapFactory.decodeResource(getResources(), R.drawable.a0007);
bmp[8]=BitmapFactory.decodeResource(getResources(), R.drawable.a0008);
bmp[9]=BitmapFactory.decodeResource(getResources(), R.drawable.a0009);
bmp[10]=BitmapFactory.decodeResource(getResources(), R.drawable.a0010);
bmp[11]=BitmapFactory.decodeResource(getResources(), R.drawable.a0011);
bmp[12]=BitmapFactory.decodeResource(getResources(), R.drawable.a0012);
bmp[13]=BitmapFactory.decodeResource(getResources(), R.drawable.a0013);
这些位图用于制作背景动画,资源是 14 张 320x480 像素的 jpj 图像。所以我创建了一个自定义视图,然后在 onDraw 方法中调用位图。然后我在手机上测试与我的图像具有相同分辨率的应用程序,它运行流畅,然后我尝试在具有更大分辨率(如 1280x720)的平板电脑上使用该应用程序,但我的背景不适合整个屏幕,所以我研究了如何通过根据设备分辨率制作具有不同分辨率的新位图来填充整个屏幕,结果是这样的:
newWidth= context.getResources().getDisplayMetrics().widthPixels;
newHeight= context.getResources().getDisplayMetrics().heightPixels;
int contador=0;
do{
bmp[contador]= Bitmap.createScaledBitmap(bmp[contador], newWidth, newHeight,true);
contador++;
}while(contador<13);
然后我简单地将这些线放在我的 onDraw 方法上。
canvas.drawBitmap(bmp[i], 0, 0, null);
i++;
如果我在手机上测试应用程序,它运行良好,但是当我在平板电脑上测试它时,我会抛出“位图大小超出 VM 预算”错误......所以我进行了更多调查,我得到了以下解决方案:创建原始14个bmp位图对象并制作第二个位图数组,称为bmp2,然后仅在需要时分配位图,然后在我的onDraw方法中像这样清除它:
bmp2[i]= Bitmap.createScaledBitmap(bmp[i], newWidth, newHeight,true);
canvas.drawBitmap(bmp2[i], 0, 0, null);
bmp2[i].recycle();
bmp2[i]=null;
它可以在我的平板电脑和手机上运行,但我认为性能非常差是因为我实时分配图像(在 onDraw 方法上)但是如果我使用回收方法并且不再次分配 bmp2 将不会一个新的bmp2...
所以最后我真正的问题是:如何在显示图像后清除一些内存,然后当我再次需要它时,我可以使用它。谢谢!