Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Android - размери на екрана - как?

Featured Replies

Здравейте. Опитвам се да си направя нещо като игричка, на която като натисна един бутон(circle), той трябва да се появи на друго (random) място на екрана. Проблема ми е, че като натискам бутончето няколко пъти, то изчезва от екрана. Все едно е извън него. Някой може ли да ми обясни защо става така?С тази функция променям Х и У на бутона:

public void setXY(){		Random r = new Random();				x = r.nextInt(width); //Ширината на екрана		y = r.nextInt(height); //Височината на екрана						circle.setX(x);		circle.setY(y);	}

Височината и ширината ги вземам по следният начин:

....                Display display = getWindowManager().getDefaultDisplay();		Point size = new Point();		display.getSize(size);		width = size.x;		height = size.y;....

Пробвах и с DisplayMetrics, но пак не става.

 

П.П: Когато извадя размерите на бутона от Х и У пак изчезва. Сложих си един TextView, за да следя къде отива бутона и ако имам примерни размери на екрана 800х600, когато кръга е на разстояние от около 200 пиксела от тези размери - изчезва.

Редактирано от RJ45 (преглед на промените)

Здравейте. Опитвам се да си направя нещо като игричка, на която като натисна един бутон(circle), той трябва да се появи на друго (random) място на екрана. Проблема ми е, че като натискам бутончето няколко пъти, то изчезва от екрана. Все едно е извън него. Някой може ли да ми обясни защо става така?С тази функция променям Х и У на бутона:

 

П.П: Когато извадя размерите на бутона от Х и У пак изчезва. Сложих си един TextView, за да следя къде отива бутона и ако имам примерни размери на екрана 800х600, когато кръга е на разстояние от около 200 пиксела от тези размери - изчезва.

Една идея: генерирайте позиция, която е така че целия кръг да е в границите на екрана. т.е. ако кръга е 200 пиксела диаметър а екрана е 1000х1000 да генерирате центъра на кръга в границите 100-900х100-900

width = size.x-diameter;		height = size.y-diameter;

...

x = r.nextInt(width)+diameter/2; 		y = r.nextInt(height)+diameter/2;
  • Автор

 

Една идея: генерирайте позиция, която е така че целия кръг да е в границите на екрана. т.е. ако кръга е 200 пиксела диаметър а екрана е 1000х1000 да генерирате центъра на кръга в границите 100-900х100-900

Направих го по следният начин:

do{			x = r.nextInt(width)-circle.getWidth();		}while(x<=circle.getWidth());		do{			y = r.nextInt(height)-circle.getHeight();		}while(y<=circle.getHeight());

Също така, го направих да е fullscreen. Досега не беше. Май това е бил главният проблем. Публикувано изображение

Направих го по следният начин:

do{			x = r.nextInt(width)-circle.getWidth();		}while(x<=circle.getWidth());		do{			y = r.nextInt(height)-circle.getHeight();		}while(y<=circle.getHeight());

Също така, го направих да е fullscreen. Досега не беше. Май това е бил главният проблем. Публикувано изображение

Хм, не съм сигурен че това, което си написал ще работи винаги. Обмисли логиката на това, което се опитах да обясня по-горе :)

Направих го по следният начин:do{x = r.nextInt(width)-circle.getWidth();}while(x<=circle.getWidth());do{y = r.nextInt(height)-circle.getHeight();}while(y<=circle.getHeight());

Ти генерираш псевдослучайни числа, докато ти отговорят на условието ли??????Олеле... Ето това са двойка псевдо-безкрайни цикли.

Ти генерираш псевдослучайни числа, докато ти отговорят на условието ли??????Олеле... Ето това са двойка псевдо-безкрайни цикли.

Да не говорим че не проверява дали част от кръга не излиза от към големите размери

  • Автор

Хм, не съм сигурен че това, което си написал ще работи винаги. Обмисли логиката на това, което се опитах да обясня по-горе Публикувано изображение

Не знам защо, но като го напиша по твоя начин не тръгва приложението. Като му дам run, на телефона ми изписва "За съжаление приложението спря.".

Не знам защо, но като го напиша по твоя начин не тръгва приложението. Като му дам run, на телефона ми изписва "За съжаление приложението спря.".

А този diameter променлива дефинирана ли е? пробвахте ли да я замените с circle.getHeight().....

  • Автор

А този diameter променлива дефинирана ли е? пробвахте ли да я замените с circle.getHeight().....

Да, същото се получава. Даже пробвах и с число и пак същата работа.

Редактирано от RJ45 (преглед на промените)

Здравейте, 

 

Понеже нямам много време, ще отбележа само основните неща.

 

Имате позиция на център и диаметър на кръга. Едното винаги ще определя допустимите стойности на другото:

 

- Ако диаметъра ще се генерира случайно, то той ще е от 0 до MIN(width,height) на дисплея.

Тогава центъра ще има наложени ограничения за x и y както следва:

X,Y ще се движат от [diameter/2, min(width,height)-diameter/2] - т.е. това ще са допустимите им стойности. (С други думи, това ще се яви един правоъгълник от допустими стойности за център, който ще има отстояние от краищата на дисплея поне diameter/2 пиксела във всички посоки).

 

- Ако центъра се генерира случайно, то той ще има ограничения:

X = [0, width]

Y = [0, height]

Диаметъра ще се определя по следното:

diameter = [0, 2 * MIN(MIN(X,Y),MIN(width-X,height-y))] или с други думи от 0 до минималното растояние от точката до който и да е край на дисплея. (2 пъти, защото все пак говорим за диамерът, а въпросното отстояние се явява радиус)

 

P.S. понеже нямам много свободно време, възможно е да съм направил технически грешки за интервалите, за което ще помоля да ги огледате отново.

Поздрави !

Редактирано от soundtracker (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.