我试图在Android中创建一个单人纸牌游戏,所以我试图为一副纸牌加载图像(总共53个图像,52个用于前面,一个用于后面的牌)。图像加载得很好,但是当我尝试缩放它们以适应任何设备的屏幕时,我通常在第13张卡片周围出现内存不足错误。这是我扩展卡片的方法:
public ArrayList<Card> mapBitmapToCard(ArrayList<Card> listOfCards, ArrayList<Bitmap> listOfImages, int screenHeight){
ArrayList<Card> result = new ArrayList<>();
for (int i = 51 ; i >= 0 ; i--){
Card card = listOfCards.get(i);
card.setScaleFactor(screenHeight);
Bitmap cardFront = listOfImages.get(i);
listOfImages.remove(i);
card.image = Bitmap.createScaledBitmap(cardFront, (int) (cardFront.getWidth() * card.scaleFactor), (int) (cardFront.getHeight() * card.scaleFactor), true);
cardFront.recycle();
Bitmap back = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.card_back));
card.back = Bitmap.createScaledBitmap(back, (int) (back.getWidth() * card.scaleFactor), (int) (back.getHeight() * card.scaleFactor), true);
back.recycle();
result.add(card);
System.out.println("" + (52 - i) + " cards completed");
}
return result;
}
有没有办法解决这个问题,可以更有效地完成这项工作?
答案 0 :(得分:1)
一个直接的想法是不加载所有这些,然后扩展所有这些。加载后立即缩放它们,然后立即回收原始图像。这种方式,而不是任何时候53个未缩放和n个缩放的图像,你有1个未缩放和n缩放。
您还可以创建52个不同的缩放后图像副本。不要这样做。缩放一次并重复使用相同的参考 - 制作52份是浪费内存,可能是您的问题。无论如何,对于所有52,背面都是相同的不是吗?