Java 在开始时将随机位置设置为ImageView

Java 在开始时将随机位置设置为ImageView,java,android,layout,imageview,Java,Android,Layout,Imageview,我对我的亲戚有8种看法。 当activity onCreate启动方法初始化时: private void init() { gameFieldView = (RelativeLayout) getGameFieldView(); mainView = (LinearLayout) getMainView(); topOffset = mainView.getHeight() - gameFieldView.getHeight() - 6;

我对我的亲戚有8种看法。 当activity onCreate启动方法初始化时:

 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"
        }
    }
private void init(){
gameFieldView=(RelativeLayout)getGameFieldView();
mainView=(LinearLayout)getMainView();
topOffset=mainView.getHeight()-gameFieldView.getHeight()-6;
//gameFieldView和mainView的高度和宽度为0
对于(int i=0;i
现在GeneratorDomainPosition看起来像

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);
    }
private void generateRandomPosition(随机,图像视图字母){
int height=letter.getHeight();
int-width=letter.getWidth();
int top=random.nextInt(gameFieldView.getMeasuredHeight()-height-topOffset);//它显然会因为IllegalArgumentException而崩溃-由于gameFieldView高度=0,参数<0
int left=random.nextInt(gameFieldView.getMeasuredWidth()-width);
字母布局(左、上、左+宽、上+高);
}
我做错了什么?提前谢谢

upd.
顺便说一句,我尝试在onWindowFocusChanged中调用init(),它以正确的方式解决了IllegalArgumentException、top和left计数的问题,但是imageview即使在letter.layout()之后仍保持在左上角。如果您下次发布LogCat/StackTrace,这将非常有用。无论如何,问题出在下面一行:
findViewById(R.id.e1_字母+i)获取资源的引用id并向其中添加整数。这可能没有任何意义。在空对象上设置某些内容将不起作用。
对您来说,通过RelativeLayout的子项进行循环要容易得多,如下所示:

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

这样,您就不需要所有ImageView的id了

谢谢您的提示,但我很确定,这不是问题,id的顺序是正确的。但是,我的确切问题是关于gameFieldView的getHeight或getWidth返回0。