Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Как определить размеры / 10 сообщений из 10, страница 1 из 1
11.09.2018, 11:49
    #39700831
Sp999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
Доброго времени суток всем!

Начал новое приложение, нагородил лайаут-файл для главного активити, внутри есть виджет ImageView.
Хотел в методе OnCreate активити определить его размеры для дальнейшего рисования с масштабированием, но не тут-то было - на этом этапе все размеры 0.
Обработку какого события надо прикрутить, чтобы это решить?

С уважением, Валера.
P.S.: При создании другого приложения, я в качестве основного содержимого главного активити устанавливал не лайаут-разметку, а класс, наследованный от View, вот там я мог заюзать событие onSizeChanged, а как сделать тут не могу придумать и в инете решения не нашел.
...
Рейтинг: 0 / 0
11.09.2018, 16:10
    #39700983
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
Sp999Хотел в методе OnCreate активити определить его размеры для дальнейшего рисования с масштабированием
Размер задаётся в LayoutParams. Под него же всё и масштабируется.

А вообще - мало того, что у гуглов получилась ужасная система, но и документирована она просто безобразно. Поэтому вам придётся ещё много чего копать и узнавать, просто для того, что бы полноценно контролировать поведение контролов на экране. Изучите пока LayoutParams, потом жизнь сама вам подскажет, что ещё изучать.
...
Рейтинг: 0 / 0
11.09.2018, 20:59
    #39701127
A Serious Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
Sp999Доброго времени суток всем!

Начал новое приложение, нагородил лайаут-файл для главного активити, внутри есть виджет ImageView.
Хотел в методе OnCreate активити определить его размеры для дальнейшего рисования с масштабированием, но не тут-то было - на этом этапе все размеры 0.
Обработку какого события надо прикрутить, чтобы это решить?

С уважением, Валера.
P.S.: При создании другого приложения, я в качестве основного содержимого главного активити устанавливал не лайаут-разметку, а класс, наследованный от View, вот там я мог заюзать событие onSizeChanged, а как сделать тут не могу придумать и в инете решения не нашел.
Размеры можешь определить так в oncreate

Код: java
1.
2.
3.
4.
5.
6.
7.
view = (ХХХХ) findViewById(R.id.ХХХХ);
view.post(new Runnable() {
   public void run() {
      int height = view.getHeight();
.....
   }
});
...
Рейтинг: 0 / 0
12.09.2018, 09:17
    #39701256
Sp999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
A Serious Man, спасибо огромное!

А не мог бы ты еще объяснить, как оно работает?
Вроде, получается, что во время onCreate компонент уже есть, но размеров не имеет.
С помощью post ставим Runnable в очередь сообщений. Интересует, в какой именно момент оно достается из очереди и выполняется (на тот момент у компонента уже определены конкретные размеры).
...
Рейтинг: 0 / 0
12.09.2018, 10:45
    #39701316
A Serious Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
Sp999A Serious Man, спасибо огромное!

А не мог бы ты еще объяснить, как оно работает?
Вроде, получается, что во время onCreate компонент уже есть, но размеров не имеет.
С помощью post ставим Runnable в очередь сообщений. Интересует, в какой именно момент оно достается из очереди и выполняется (на тот момент у компонента уже определены конкретные размеры).

Когда oncreate завершится, будут сформированы вью, по окончанию запустится этот тред.
...
Рейтинг: 0 / 0
12.09.2018, 12:19
    #39701375
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
A Serious ManРазмеры можешь определить так в oncreate
это какой-то жуткий костыль, здесь ты закладываешься на то, что потоковый код выполнится позже полной инициализации и отрисовки view, что мягко говоря спекуляций - однажды это может не сработать
если уж нам кровь-из-носу нужен размер View, в чем я сильно не уверен, то это можно сделать с помощью GlobalLayoutListener
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
  viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      viewWidth = view.getWidth();
      viewHeight = view.getHeight();
    }
  });
}
...
Рейтинг: 0 / 0
13.09.2018, 07:08
    #39701795
Sp999
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
chpasha,

А откуда этот код запускать? и каков принцип его работы?

С уважением, Валера.
P.S.: Кстати, всех с профессиональным праздником!
...
Рейтинг: 0 / 0
13.09.2018, 12:23
    #39702007
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
Sp999А откуда этот код запускать?
ну ты же хотел в onCreate, там и запускай. хотя пока ты не объяснишь внятно зачем тебе нужно знать размеры, есть ненулевая вероятность того, что ты не в том месте копаешь.

Sp999и каков принцип его работы?
если не вдаваться подробности, то принцип в том что это событие кидается тогда, когда View уже определился с размерами и расположился в содержащем его контейнере - в этот момент уже можно спрашивать его о размерах
...
Рейтинг: 0 / 0
14.09.2018, 10:04
    #39702443
A Serious Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
chpashaA Serious ManРазмеры можешь определить так в oncreate
это какой-то жуткий костыль, здесь ты закладываешься на то, что потоковый код выполнится позже полной инициализации и отрисовки view, что мягко говоря спекуляций - однажды это может не сработать
если уж нам кровь-из-носу нужен размер View, в чем я сильно не уверен, то это можно сделать с помощью GlobalLayoutListener
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
  viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      viewWidth = view.getWidth();
      viewHeight = view.getHeight();
    }
  });
}


Мое работает, проверено и не один раз! У тебя какая-то перенахлобученность, такое не использовал.
...
Рейтинг: 0 / 0
14.09.2018, 10:45
    #39702481
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить размеры
A Serious ManМое работает, проверено и не один раз
верю, но я объяснил почему это чисто случайный эффект - ты просто ставишь Runnable в очередь сообщений и надеешься, что оно сработает позже чем инициализация View

A Serious ManУ тебя какая-то перенахлобученность
не знал, что у нас тут соревнования. единственный известный мне надежный способ именно таков, увы ему не победить на конкурсе лаконичности
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Как определить размеры / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]