Автоматическая анимация изменения размера View

Ответить
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Автоматическая анимация изменения размера View

Сообщение neoksi » 28 дек 2012, 07:46

На активити есть два элемента view, назовем их v1 и v2. Оба они имеют одинаковый вес (1), но при создании v1 имеет видимость VISIBLE, а v2 видимость GONE. В результате v1 занимает все доступное пространство. Необходимо при переводе видимости v2 в INVISIBLE анимировать изменение размеров v1. По окончании изменения размеров v1 анимировать появление v2.
Основной вопрос, можно ли и как назначить автоматическую анимацию v1, которая будет срабатывать при необходимости v1 изменить её размеры?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Автоматическая анимация изменения размера View

Сообщение neoksi » 28 дек 2012, 19:33

Так вообще возможно такое событие отловить и назначить анимацию?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Автоматическая анимация изменения размера View

Сообщение neoksi » 28 дек 2012, 19:58

Правильно ли я понимаю, что мне необходимо у View отловить события onSizeChanged http://developer.android.com/intl/ru/re ... ,%20int%29
И на основе данных из этого события запустить анимацию? Или же при вызове в событии onSizeChanged анимации я получу цикличный вызов события?

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Автоматическая анимация изменения размера View

Сообщение behzodbek » 29 дек 2012, 08:18

Тема интересная. Если найдеш способ делись
Изображение

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Автоматическая анимация изменения размера View

Сообщение neoksi » 29 дек 2012, 09:24

behzodbek писал(а):Тема интересная. Если найдеш способ делись
Принципиальная схема в голове уже сложилась, осталось отследить события, их логику действия и реализовать.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Автоматическая анимация изменения размера View

Сообщение neoksi » 03 янв 2013, 10:12

В ходе экспериментов выяснил следующее: при изменении размеров элемента View для перерисовки задействуется метод invalidate.

Логика получается следующая:
1) invalidate со старыми размерами
2) onSizeChanged с указанием новых размеров
3) invalidate с новыми размерами

Идея в следующем, при фиксации изменения размеров в методе onSizeChanged единоразово блокировать выполнение метода invalidate и запускать анимацию. На время выполнения анимации блокировать конструкцию блокирующую invalidate для успешного выполнения анимации, а по завершении снимать блокировку.

Вот такой вот велосипед, но ничего лаконичней пока не нашел.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Автоматическая анимация изменения размера View

Сообщение neoksi » 04 янв 2013, 07:31

В общем полный провал =)

Для реализации необходимо перекрыть метод public void layout(int l, int t, int r, int b) или protected boolean setFrame(int left, int top, int right, int bottom), которые перекрыть в потомках нельзя... Свой класс View реализовывать, чтоб перекрыть методы, не охота ;).

Придется анимировать вручную ;).

Ответить