gpt4 book ai didi

java - 如何在 Android 中处理多个 ImageView 而不会出现内存问题?

转载 作者:行者123 更新时间:2023-12-02 01:32:49 26 4
gpt4 key购买 nike

我正在尝试在 Android Studio 中开发一个简单的纸牌游戏,由四个玩家玩。不过,我一开始就很挣扎。我是 Android 编程新手,但不是 Java 开发新手。

我只想进行纸牌分配(发牌),将 52 张纸牌分配给每个玩家,位于屏幕中的西、南、东、北。

所以我猜,我需要 52 个代表卡片的 ImageView,所以我创建了一个类:

public class Card extends ImageView {
public Card(Context context, int id) {
super(context);
setImageResource(id);
}
}

我有一个静态字符串数组,其中包含 52 个代表卡名称的元素,一个哈希表,其中卡名称为键,卡对象为值,并且我在可绘制文件夹中拥有所有卡的图像,名称相同因为它们在静态数组中命名,所以我可以映射它们。我试图在 MainActivity 中执行此操作:

for (String cardName : cardNames) {
int imageId = Utilities.getResId(cardName, R.drawable.class);//this just
//gets the id of the image in R
Card card = new Card(this, imageId);
cards.put(cardName, card);
linearLayout.add(card);
}

我还通过调用以下方法在内容 View 中设置了上面填充的 LinearLayout:

setContentView(linearLayout);

我收到的错误是

java.lang.OutOfMemoryError: Failed to allocate a 11675148 byte allocation with 10183056 free bytes and 9MB until OOM.

这个错误是在 for 循环中大约第 15 次循环时抛出的。

现在感觉这肯定是处理这个问题的错误方法。对于这种游戏我应该遵循什么最佳方法?这些图像将在游戏的整个生命周期中出现在屏幕上,并且还会有简单的动画,例如选择要扔的卡牌并扔掉它。

如何处理这种情况以及将来在游戏过程中避免内存问题的解决方案是什么?

最佳答案

在我看来,发生这种情况是因为您在 Linearlayout 中添加了太多 View ,并使 View 层次结构变得厚重而没有任何深度。

我认为最好的方法是使用 RecylerView对于这个问题是因为RecyclerView有自己的内存管理方式。您甚至可以使用自定义 LayoutManager 在屏幕上弯曲这些卡片。 (就像将它们握在手上一样)。两个垂直的 RecyclerView 和两个水平的 RecyclerView 就可以完成这项工作。

如果万一它不起作用,请尝试将这些 RecyclerView 包装在 Fragments 中.

关于java - 如何在 Android 中处理多个 ImageView 而不会出现内存问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com