Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 7
#1

Узнать доступные координаты (размер экрана) - Программирование Android

21.11.2016, 15:21. Просмотров 478. Ответов 9
Метки нет (Все метки)

Всем привет. Мне нужно в программе сделать случайное перемещение ImageButton, сейчас у меня заданы жесткие координаты которые подобраны методом тыка.
Java
1
2
3
public int getRandomCoordinateWidth() { //!!поменять значения до какого рандом может меняться, так как не знаю полные координаты
        return random.nextInt(575);
    }
Координаты кнопки меняю так
i
Java
1
mageButton.setX(getRandomCoordinateWidth());
Соответственно программа нормально работает только на одном устройстве. Как мне узнать доступные координаты программно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 15:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Узнать доступные координаты (размер экрана) (Программирование Android):

Как подгонять размер диалоговых окон по размер экрана? - Программирование Android
Здравствуйте! Как подгонять размер диалоговых окон по размер экрана? У меня есть класс, унаследованный от DialogFragment. При запуске...

Физический размер экрана - Программирование Android
Пишу на OpenGL ES DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); Затем...

Размер экрана без шапки - Программирование Android
Создаю диалог вручную. Нужно знать точный размер экрана без учета панели с батареей, вай-фаем, связью, иконками... Как узнать полный...

Узнать размер view - Программирование Android
Как узнать размер view, если он лежит в layout, и обрезается им (размер view больше, чем размер layout). view.getHeight и...

RecyclerView создает Item на размер экрана, как исправить? - Программирование Android
Аномалии, сменил версию RecyclerView с 21.0.+ на 23.3.0. Теперь он создает 1 элемент на весь размер экрана. Т.е элемент CardView создается...

Как узнать разрешение экрана - Программирование Android
Пробовал Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int width = display.getWidth(); ...

9
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
21.11.2016, 15:32 #2
Переопределить метод onMeasure у View, на которой кнопка.
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,063
Завершенные тесты: 1
21.11.2016, 15:34 #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.Button;
 
import java.util.Random;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private static final Random r = new Random();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        final ViewParent parent = v.getParent();
        if (parent instanceof ViewGroup) calcNewPos((ViewGroup) parent, v);
    }
 
    private void calcNewPos(ViewGroup parent, View v) {
        int pw = parent.getMeasuredWidth() - v.getMeasuredWidth();
        int ph = parent.getMeasuredHeight() - v.getMeasuredHeight();
        int nx = r.nextInt(pw);
        int ny = r.nextInt(ph);
        v.setTranslationX(nx);
        v.setTranslationY(ny);
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hit me" />
 
</FrameLayout>
1
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 7
21.11.2016, 16:33  [ТС] #4
В примере данном выше я так понимаю можно узнавать размер только в обработчики нажатия. А можно ли это сделать в onCreate, до нажатия на кнопку? Если можно какой нибуть самый простейший пример. Я так понимаю вместе viev нужно подставить layout?

вот так вот не прокатывает
Java
1
2
3
        View  aq=findViewById(R.id.activity_main);
        int pWidth=aq.getMeasuredWidth();
        int pHeight=aq.getMeasuredHeight();
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,063
Завершенные тесты: 1
21.11.2016, 17:29 #5
Цитата Сообщение от Catchermax Посмотреть сообщение
А можно ли это сделать в onCreate, до нажатия на кнопку?
в onCreate нет, потому что в этот может еще не просчитаны размеры, но можно сделать так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class MainActivity extends AppCompatActivity implements ViewTreeObserver.OnGlobalLayoutListener {
 
    private static final Random r = new Random();
    private Button button;
    private ViewGroup rootLayout;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        rootLayout = (ViewGroup) findViewById(R.id.root);
        rootLayout.getViewTreeObserver().addOnGlobalLayoutListener(this);
    }
 
    @Override
    public void onGlobalLayout() {
        int pw = rootLayout.getMeasuredWidth() - button.getMeasuredWidth();
        int ph = rootLayout.getMeasuredHeight() - button.getMeasuredHeight();
        int nx = r.nextInt(pw);
        int ny = r.nextInt(ph);
        button.setTranslationX(nx);
        button.setTranslationY(ny);
    }
}
1
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 115
21.11.2016, 19:44 #6
или попробуйте событие:
Java
1
2
3
    public void onWindowFocusChanged(boolean hasFocus) {
 
    }
1
_Night_Scream_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
21.11.2016, 19:53 #7
я делаю так в onCreate

Java
1
2
3
4
Point size = new Point();
display.getSize(size);
widthDisplay = size.x;
heightDisplay = size.y;
Но это не parent, у меня перемещение по корневому relativeLayout
1
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,063
Завершенные тесты: 1
21.11.2016, 20:16 #8
это размер экрана, он 100% не равен лаяуту, даже если это корневой лаяут
там как минимум status bar съест немного + тулбар
1
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 7
21.11.2016, 22:03  [ТС] #9
Всем спасибо, в итоге я воспользовался этим способом
Java
1
2
3
4
Point size = new Point();
display.getSize(size);
widthDisplay = size.x;
heightDisplay = size.y;
этот способ наименее простой но и не совсем правильный, выдает размер больше чем реальный размер layout, методом опять же тыка немного уменьшил это значение до приемлемых. Сейчас от программы не требуется доскональной работы, поэтому пока сойдет.

С остальными выходили какие то проблемы, то R.id.root не видит, то ещё что нибуть, видимо я что то делал не правильно.
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,063
Завершенные тесты: 1
22.11.2016, 11:27 #10
Цитата Сообщение от Catchermax Посмотреть сообщение
то R.id.root не видит, то ещё что нибуть, видимо я что то делал не правильно.
неужели так сложно понять, что root - это id корневого лаяута, или лаяута в котором надо вытягивать координаты
id задается в xml
0
22.11.2016, 11:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2016, 11:27
Привет! Вот еще темы с ответами:

Yandex mapkit узнать координаты адреса - Программирование Android
Доброго времени суток. Только начал работать с yandex map kit и не могу найти ответа на вопрос как по адресу узнать координаты? Нужно...

Как программно узнать ppi экрана? - Программирование Android
Как программно узнать ppi экрана?

Узнать время, прошедшее от запуска экрана - Программирование Android
Подскажите, как лучше реализовать: запускаем экран и по истечениюопределенного времени что-то происходит(меняеться картинка). Закрыли...

Как автоматически изменять размер текста в spinner в зависимости от размера экрана? - Программирование Android
Здравствуйте. В программе использую две темы светлую и темную: &lt;style name=&quot;BlackTheme&quot; parent=&quot;android:style/Theme.Holo&quot;&gt; &lt;item...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.