Форум программистов, компьютерный форум CyberForum.ru

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

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

Размер экрана без шапки Android
Android Физический размер экрана
Как узнать разрешение экрана Android
Yandex mapkit узнать координаты адреса Android
Узнать время, прошедшее от запуска экрана Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
 Аватар для OlegJV
98 / 98 / 29
Регистрация: 13.03.2016
Сообщений: 444
21.11.2016, 15:32     Узнать доступные координаты (размер экрана) #2
Переопределить метод onMeasure у View, на которой кнопка.
Паблито
не спать!
1786 / 1520 / 472
Регистрация: 12.05.2014
Сообщений: 5,549
Завершенные тесты: 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>
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 4
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();
Паблито
не спать!
1786 / 1520 / 472
Регистрация: 12.05.2014
Сообщений: 5,549
Завершенные тесты: 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);
    }
}
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
21.11.2016, 19:44     Узнать доступные координаты (размер экрана) #6
или попробуйте событие:
Java
1
2
3
    public void onWindowFocusChanged(boolean hasFocus) {
 
    }
_Night_Scream_
50 / 50 / 6
Регистрация: 08.08.2013
Сообщений: 481
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
Паблито
не спать!
1786 / 1520 / 472
Регистрация: 12.05.2014
Сообщений: 5,549
Завершенные тесты: 1
21.11.2016, 20:16     Узнать доступные координаты (размер экрана) #8
это размер экрана, он 100% не равен лаяуту, даже если это корневой лаяут
там как минимум status bar съест немного + тулбар
Catchermax
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 4
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 не видит, то ещё что нибуть, видимо я что то делал не правильно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2016, 11:27     Узнать доступные координаты (размер экрана)
Еще ссылки по теме:

Android Как подгонять размер диалоговых окон по размер экрана?
Android Узнать размер view
Android RecyclerView создает Item на размер экрана, как исправить?

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

Или воспользуйтесь поиском по форуму:
Паблито
не спать!
1786 / 1520 / 472
Регистрация: 12.05.2014
Сообщений: 5,549
Завершенные тесты: 1
22.11.2016, 11:27     Узнать доступные координаты (размер экрана) #10
Цитата Сообщение от Catchermax Посмотреть сообщение
то R.id.root не видит, то ещё что нибуть, видимо я что то делал не правильно.
неужели так сложно понять, что root - это id корневого лаяута, или лаяута в котором надо вытягивать координаты
id задается в xml
Yandex
Объявления
22.11.2016, 11:27     Узнать доступные координаты (размер экрана)
Ответ Создать тему
Опции темы

Текущее время: 20:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru