Случайное размещение элементов

Интерфейс, диалоги, темы, стили, меню
Ответить
star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Случайное размещение элементов

Сообщение star-w1 » 08 апр 2012, 17:01

Здравствуйте! Необходимо случайным образом задать 10 элементов(например картинок) на раб. области
есть ли свойство позволяющие случайно задавать позицию или для этого надо писать метод...если да то какой??))
за ранее спс!

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Случайное размещение элементов

Сообщение andev » 08 апр 2012, 23:28

Случайно задавать размещение поможет рандом, напишите свой метод.
Например, у вас картинки имеют размеры imageWidth и imageHeight. Тогда координаты левого верхнего угла x,y для каждой картинки можно получить так:

Код: Выделить всё

        int imageWidth = 10;
        int imageHeight = 10;
        
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels; // вместо height и width экрана может быть высота
        int width = displaymetrics.widthPixels; // и ширина вашего родительского элемента
        
        Random r = new Random();
        int x = r.nextInt(width - imageWidth);
        int y = r.nextInt(height - imageHeight);
Если вам необходимо что бы картинки не пересекались, то во-первых их надо где-то хранить, а во-вторых при расчете координат для каждой картинки необходимо проверять все ее 4 стороны на попадание в уже существующие картинки.
Дальше конкретизировать не вижу смысла, не совсем ясна ваша задача

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: Случайное размещение элементов

Сообщение star-w1 » 10 апр 2012, 19:55

Спасибо)) Не понял только как точки x и у связать с картинкой(например ImageView)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Случайное размещение элементов

Сообщение KamiSempai » 10 апр 2012, 21:31

Что именно Вы хотите сделать? Картинки должны распологаться сеткой и случайно разбросаны по экрану?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: Случайное размещение элементов

Сообщение star-w1 » 10 апр 2012, 22:16

случайно разбросаны по экрану!

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Случайное размещение элементов

Сообщение KamiSempai » 10 апр 2012, 23:03

Тогда, наверно, лучше расположить на экране 1 элемент, например ImageView, и рисовать все изображения на нем. Координаты можно вычислять так, как сказал andev. Но это уже графика, а по графике, пока, на этом сайте уроков нет.
На смом деле есть слой AbsoluteLayout на котором нужно точно указывать положения элементов, но он уже давно устарел и его лучше не использовать.

Еще один вопрос. Изображения должны перемещаться и реагировать на нажатие?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: Случайное размещение элементов

Сообщение star-w1 » 11 апр 2012, 00:41

хм...да, изображения должны перемещаться причем с разной скоростью и при взаимодействии исчезать это еще правда один вопрос))
а где можно почитать про графику и как это все можно реализовать?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Случайное размещение элементов

Сообщение andev » 11 апр 2012, 01:26

Если перемещаться и взаимодействовать, то это быстрее всего вы хотите сделать игру, я угадал?
Почитать можно здесь
http://www.android10.org/index.php/arti ... oid-part-i
или где угодно, воспользовавшись поиском

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Случайное размещение элементов

Сообщение KamiSempai » 11 апр 2012, 06:59

Вот сайт: http://davidmd.ru/%D1%83%D1%80%D0%BE%D0 ... E-android/
Там человек подробно описывает создание движка для игры.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: Случайное размещение элементов

Сообщение star-w1 » 11 апр 2012, 13:04

угадал))
пошел читать....

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: Случайное размещение элементов

Сообщение star-w1 » 13 апр 2012, 23:13

andev писал(а):Случайно задавать размещение поможет рандом, напишите свой метод.
Например, у вас картинки имеют размеры imageWidth и imageHeight. Тогда координаты левого верхнего угла x,y для каждой картинки можно получить так:

Код: Выделить всё

        int imageWidth = 10;
        int imageHeight = 10;
        
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int height = displaymetrics.heightPixels; // вместо height и width экрана может быть высота
        int width = displaymetrics.widthPixels; // и ширина вашего родительского элемента
        
        Random r = new Random();
        int x = r.nextInt(width - imageWidth);
        int y = r.nextInt(height - imageHeight);
Если вам необходимо что бы картинки не пересекались, то во-первых их надо где-то хранить, а во-вторых при расчете координат для каждой картинки необходимо проверять все ее 4 стороны на попадание в уже существующие картинки.
Дальше конкретизировать не вижу смысла, не совсем ясна ваша задача
что то не работает этот пример кода(( точнее работает но условие width - imageWidth нормально не выполняется...есть случае когда картинка выходит за приделы экрана или полностью или частично((
Что только не перепробовал......не хочет((
использовал:

Код: Выделить всё

public class MainActivity extends Activity {
	
	
    


	    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new Panel(this));
        
        
    }
    class Panel extends View {
        
		public Panel(Context context) {
            super(context);
            
       
        }
		
        @Override
        public void onDraw(Canvas canvas) {
        	
        	Bitmap t_fish = BitmapFactory.decodeResource(getResources(), R.drawable.t_fish);
            Bitmap x_fish = BitmapFactory.decodeResource(getResources(), R.drawable.x_fish);
            canvas.drawColor(Color.BLUE);
            
            int image_h_t = t_fish.getHeight();
            int image_w_t =  t_fish.getWidth();
            int image_h_x = x_fish.getHeight();
            int image_w_x =  x_fish.getWidth();
            
        	DisplayMetrics displaymetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
          //  int height = displaymetrics.heightPixels; 
         //   int width = displaymetrics.widthPixels;
            int height= canvas.getHeight();
            int width = canvas.getWidth();
            Random r = new Random();
          int z = height-image_h_t;
          int x = width-image_w_t;
            int y1 = r.nextInt(z);
           	int x1 = r.nextInt(x);
           	int y2 = r.nextInt(height-image_h_x);
	        int x2 = r.nextInt(width-image_w_x);
	        
   	           // if((y1 <  height - image_h_t) && (x1 < width - image_w_t)){
   	            canvas.drawBitmap(t_fish, x1, y1, null);
   	       //     }
   	         
   	        //    if (y2 < height - image_h_x && x2 < width - image_w_x){
   	            canvas.drawBitmap(x_fish, x2, y2, null);
   	        //    }
   	            
        	          
            
            
             
        }
        
    }
    
}

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Случайное размещение элементов

Сообщение andev » 14 апр 2012, 09:12

давайте, что-ли, архив проекта.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Случайное размещение элементов

Сообщение KamiSempai » 14 апр 2012, 11:44

Очевидно проблема в методе drawBitmap. В ОФИЦИАЛЬНОЙ ДОКУМЕНТАЦИИ гугла говорится примерно следующее:
Если bitmap и canvas имеют различную плотность, эта функция "позаботится" о автоматическом масштабировании bitmap до той же плотности как у canvas.
Видимо при рисовании размер картинок изменяется.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Ответить