Страница 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.
Видимо при рисовании размер картинок изменяется.