Лучший способ добавить изображения в макет в произвольном месте - PullRequest
2 голосов
/ 15 сентября 2011

Вопрос говорит сам за себя, у меня есть 52 изображения (колода карт), которые я хочу показать в случайных позициях.

У меня сейчас есть это:

for (Card card : deck.getAll()) {
        ImageView iv = new ImageView(this);
        RelativeLayout.LayoutParams lParams = new RelativeLayout.LayoutParams(57, 105);
        if (random) {
            lParams.leftMargin = (int)Math.ceil(Math.random()*(metrics.widthPixels - 57));
            lParams.topMargin = (int)Math.ceil(Math.random()*(metrics.heightPixels - 105));
        } else {
            //if (metrics.widthPixels < ((i + 1) * 57)) {i = 0;++j;}
            if (i > 12) {i = 0;++j;}
            lParams.leftMargin = i*60; 
            lParams.topMargin  = j*107;
            ++i;
        }
        iv.setRotation((float)Math.ceil(Math.random()*(360)));
        iv.setId(card.getInt());

        layout.addView(iv, lParams);

Пока это работает, но позже мне придется отображать все карты в определенных местах, и мне просто не совсем удобно размещать все по полям.

Заранее спасибо за любые советы!

1 Ответ

1 голос
/ 15 сентября 2011

Продолжайте читать об использовании Canvas и рисовании растровых изображений непосредственно к этому. Вы помещаете один View для рендеринга, а затем реализует onDraw этого, чтобы рендерить свои карты на холст этого одного View.

Каждый раз, когда карту нужно переместить, вы перерисовываете Canvas, и в этом нет необходимости. Это в основном, как работают 2d игры. Есть много учебных пособий, и это совсем не займет много времени.

...