Анимация для расширяемого списка просмотра

на ubuntu:

sudo apt-get install php-mysql
sudo service apache2 restart
30
задан Ajit Pratap Singh 6 February 2012 в 11:44
поделиться

2 ответа

Это можно сделать с помощью простого ListView, который содержит изначально скрытое представление и пользовательский класс, расширяющий Animation. Основная идея состоит в том, чтобы начать с View.GONE, а затем постепенно изменять размер поля с отрицательного значения до требуемого размера, устанавливая видимость на View.VISIBLE.

См .:

.. и, наконец,

Последний пример содержит весь необходимый код. Это выглядит немного хакерским для меня, особенно тот факт, что вы должны изначально установить view.bottomMargin = -50 или более, в противном случае анимация не работает должным образом с первого раза, но до сих пор я не нашел какой-либо жизнеспособной альтернативы (кроме использования ScrollView с ваши собственные элементы контейнера вместо ListView).

И, наконец, это приложение включает в себя приведенный выше пример, среди множества других полезных примеров со ссылками на источники:

Обновление: Google удалил приложение из игрового магазина якобы за нарушение интеллектуальной собственности (хотя оно содержало только демонстрации и ссылки на проекты с открытым исходным кодом), автор теперь сделал apk доступен для прямой загрузки с http://goo.gl/ihcgs Подробнее см. https://plus.google.com/108176685096570584154/posts . NB: я не связан с автором.

10
ответ дан 13 revs 6 February 2012 в 11:44
поделиться

Я нашел возможное (частичное) решение этой проблемы.

сначала вам нужно сохранить состояние прокрутки ExpnadableListView:

@Override
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
    this.mScrollState = scrollState;
}

public int getScrollState() {
    return this.mScrollState;
}

для самого listView, вам нужно сохранить, какая группа была нажата, чтобы анимировались только ее дочерние элементы:

mListView.setOnGroupClickListener(...
@Override
public boolean onGroupClick(...){
mGroupPosition=groupPosition;

Теперь, в методе getChildView (), вы проверяете состояние прокрутки, и если он простаивает, вы запускаете анимацию, например:

public View getChildView(...) {
// <=prepare rootView and return it later
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE)
    rootView.setAnimation(...)

это установит анимацию для просмотра ребенком каждый раз, когда вы расширяете группу.

недостатком этого являются:

  1. только для расширенных дочерних представлений. вам нужно подумать о дополнительной логике, чтобы оживить их, когда рушитесь.
  2. Все анимации запускаются одновременно. вам нужно будет добавить несколько анимаций одну за другой, если вы хотите, чтобы это работало иначе.
1
ответ дан android developer 6 February 2012 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: