Анимирование дочерних элементов расширяемого списка при свертывании/расширении
Я пытаюсь анимировать представления моего ребенка в файле expandablelistview. Я хотел бы, чтобы представление ребенка скользило вниз сверху вниз при расширении группы и сползало снизу вверх, когда свертывалось группа. Я просмотрел несколько методов (анимируя представления или дочерние представления), но ни один из них не работает очень хорошо, или я не делаю это правильно.
Я расширил класс из BaseExpandableListAdapter, чтобы создать собственный пользовательский адаптер. У меня также есть пользовательские (xml) представления для групп /childs, которые я раздуваю в методах getChildView и getGroupView.
Мне бы хотелось, чтобы текущая сложенная/расширенная группа анимировала ее. Может кто-то указать мне верное направление? Если вам нужна дополнительная информация или код, пожалуйста, дайте мне знать!
С уважением,
Иво
Ответы
Ответ 1
Итак, я сделал это, чтобы использовать обычный список, а затем анимировать представления строк при нажатии.
Я использую этот метод для анимации: Android animate выпадающий вверх/вверх правильно
Это может быть немного сложно, если высота для представления будет опущена - wrap_content, для этой проблемы мне пришлось найти и установить высоту до начала анимации:
public static void setHeightForWrapContent(Activity activity, View view) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth = metrics.widthPixels;
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(screenWidth, MeasureSpec.EXACTLY);
view.measure(widthMeasureSpec, heightMeasureSpec);
int height = view.getMeasuredHeight();
view.getLayoutParams().height = height;
}
Перед началом анимации представление должно исчезнуть, а затем сделать видимым, когда начинается анимация.
Изменить: я сделал полный пример здесь.
Ответ 2
Вы можете добавить анимацию к каждому дочернему виду в методе bindChildView.
Чтобы анимировать только текущий дочерний элемент группы - просто поймайте событие onExpand, прочитайте его дочерние элементы, сохраните идентификаторы в каком-либо массиве и в bindChildView - оставьте только дочерние элементы, сохраненные в этом массиве.
Ответ 3
Другое решение - использовать библиотеку Android-SlideExpandableListView, которую я написал:
https://github.com/tjerkw/Android-SlideExpandableListView
Он основывается на идеях Удинича и других.
Подробнее об этом можно прочитать в этом блоге:
http://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/