gpt4 book ai didi

java - 在开始时为 ImageView 设置随机位置

转载 作者:行者123 更新时间:2023-12-01 15:25:50 26 4
gpt4 key购买 nike

我的RelativeLayout 上有8 个ImageView。当 Activity onCreate 时,它​​启动方法 init:

 private void init() {
gameFieldView = (RelativeLayout) getGameFieldView();
mainView = (LinearLayout) getMainView();
topOffset = mainView.getHeight() - gameFieldView.getHeight() - 6;
// THERE ARE 0 height and width of gameFieldView, and mainView
for (int i = 0; i < LETTERS_NUMBER; i++) {
ImageView letter = (ImageView) findViewById(R.id.e1_letter + i);
generateRandomPosition(random, letter); // When i comment this line it is ok (What kind of sorcery is this?), but i want to set random position to ImageView "letter"
}
}

现在generateRandomPosition看起来像

private void generateRandomPosition(Random random, ImageView letter) {
int height = letter.getHeight();
int width = letter.getWidth();
int top = random.nextInt(gameFieldView.getMeasuredHeight() - height - topOffset); // It obviously crashes because of IllegalArgumentException - parameter < 0 because of gameFieldView height = 0
int left = random.nextInt(gameFieldView.getMeasuredWidth() - width);
letter.layout(left, top, left + width, top + height);
}

我做错了什么?提前致谢。

更新。顺便说一下,我尝试在 onWindowFocusChanged 中调用 init() ,它解决了 IllegalArgumentException 的问题,以正确的方式进行顶部和左侧计数,但即使在 letter.layout() 之后,imageview 仍保持在左上角

最佳答案

如果您下次能发布您的 LogCat/StackTrace,将会很有帮助。无论如何,问题出在下面一行: findViewById(R.id.e1_letter + i); 您正在获取资源的引用 id 并向其添加一个整数。这可能并不能说明什么。在空对象上设置某些内容是行不通的。循环遍历Rel​​ativeLayout的子级会更容易,如下所示:

ViewGroup v = (ViewGroup) gameFieldView;
for(int i = 0; i < v.getChildCount(); ++i) {
ImageView letter = (ImageView) v.getChildAt(i);
generateRandomPosition(random, letter);
}

这样你就不需要所有 ImageView 的 id

关于java - 在开始时为 ImageView 设置随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156497/

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