Страница 1 из 1

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

Добавлено: 08 апр 2012, 17:01
star-w1
Здравствуйте! Необходимо случайным образом задать 10 элементов(например картинок) на раб. области
есть ли свойство позволяющие случайно задавать позицию или для этого надо писать метод...если да то какой??))
за ранее спс!

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

Добавлено: 08 апр 2012, 23:28
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 стороны на попадание в уже существующие картинки.
Дальше конкретизировать не вижу смысла, не совсем ясна ваша задача

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

Добавлено: 10 апр 2012, 19:55
star-w1
Спасибо)) Не понял только как точки x и у связать с картинкой(например ImageView)

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

Добавлено: 10 апр 2012, 21:31
KamiSempai
Что именно Вы хотите сделать? Картинки должны распологаться сеткой и случайно разбросаны по экрану?

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

Добавлено: 10 апр 2012, 22:16
star-w1
случайно разбросаны по экрану!

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

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

Еще один вопрос. Изображения должны перемещаться и реагировать на нажатие?

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

Добавлено: 11 апр 2012, 00:41
star-w1
хм...да, изображения должны перемещаться причем с разной скоростью и при взаимодействии исчезать это еще правда один вопрос))
а где можно почитать про графику и как это все можно реализовать?

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

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

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

Добавлено: 11 апр 2012, 06:59
KamiSempai
Вот сайт: http://davidmd.ru/%D1%83%D1%80%D0%BE%D0 ... E-android/
Там человек подробно описывает создание движка для игры.

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

Добавлено: 11 апр 2012, 13:04
star-w1
угадал))
пошел читать....

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

Добавлено: 13 апр 2012, 23:13
star-w1
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);
   	        //    }
   	            
        	          
            
            
             
        }
        
    }
    
}

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

Добавлено: 14 апр 2012, 09:12
andev
давайте, что-ли, архив проекта.

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

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