Страница 1 из 1

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

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

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

Добавлено: 28 дек 2012, 19:33
neoksi
Так вообще возможно такое событие отловить и назначить анимацию?

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

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

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

Добавлено: 29 дек 2012, 08:18
behzodbek
Тема интересная. Если найдеш способ делись

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

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

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

Добавлено: 03 янв 2013, 10:12
neoksi
В ходе экспериментов выяснил следующее: при изменении размеров элемента View для перерисовки задействуется метод invalidate.

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

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

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

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

Добавлено: 04 янв 2013, 07:31
neoksi
В общем полный провал =)

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

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