powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Как определить размеры
10 сообщений из 10, страница 1 из 1
Как определить размеры
    #39700831
Sp999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем!

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

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

А вообще - мало того, что у гуглов получилась ужасная система, но и документирована она просто безобразно. Поэтому вам придётся ещё много чего копать и узнавать, просто для того, что бы полноценно контролировать поведение контролов на экране. Изучите пока LayoutParams, потом жизнь сама вам подскажет, что ещё изучать.
...
Рейтинг: 0 / 0
Как определить размеры
    #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
Как определить размеры
    #39701256
Sp999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A Serious Man, спасибо огромное!

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

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

Когда oncreate завершится, будут сформированы вью, по окончанию запустится этот тред.
...
Рейтинг: 0 / 0
Как определить размеры
    #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
Как определить размеры
    #39701795
Sp999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

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

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

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

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


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