私はRelativeLayoutに8つのImageViewを持っています。 活動はのonCreateそれがinitメソッドを起動すると:開始時にランダムな位置をImageViewに設定します
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);
}
のように見えますか?前もって感謝します。
upd。ところで が、私はonWindowFocusChangedにinit()メソッドをコールしようとした、(それは正しい方法ではIllegalArgumentException、上部と左の数の問題を解決するが、ImageViewのも、letter.layout後に左上隅にとどまる)
のためにあなたのヒントをありがとうidを必要としませんが、私はかなりよこの道確かに、それは問題ではなく、IDは正しい順序で一つずつです。しかし、私の正確な質問は、gameFieldViewのgetHeightまたはgetWidthの返り値で約0でした。 –