2015-03-08 58 views
0

我正嘗試在android中創建單人紙牌遊戲,因此我正在嘗試加載一張完整的卡片圖像(總共53個圖像,前面52個圖像和一個爲卡的後面)。圖像加載得很好,但是當我嘗試縮放它們以適應任何設備的屏幕時,通常在第13張卡的附近出現內存不足錯誤。這裏是我的方法來擴展卡:加載位圖列表時出現OOM錯誤Android

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; 
    } 

有沒有什麼辦法可以解決這個礦石更有效地完成這個?

回答

1

一個直接的想法是不加載所有的人,然後縮放所有人。加載後立即對其進行縮放,然後立即回收原始圖像。這種方式,而不是在任何一個時間53非縮放和n縮放圖像,你有1個未縮放和n縮放。

它看起來像你正在創建52縮放後圖像的不同副本。不要這樣做。縮放一次並重復使用相同的參考文件 - 製作52個副本會浪費內存,並可能是您的問題。無論如何,所有52後面都是一樣的不是嗎?

+0

您可能也不需要預加載全部52個卡片前端。看看你是否可以按需快速載入它們。 – GreyBeardedGeek 2015-03-08 23:36:15