анимация потомков расширяемого списка при свертывании / развертывании - PullRequest
16 голосов
/ 27 декабря 2010

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

Я расширил класс из BaseExpandableListAdapter для создания своего собственного адаптера. У меня также есть пользовательские (xml) представления для групп / дочерних элементов, которые я надуваю в методах getChildView и getGroupView.

Мне бы хотелось, чтобы текущая свернутая / развернутая группа анимировала своего ребенка. Может кто-то указать мне верное направление? Если вам нужна дополнительная информация или код, пожалуйста, дайте мне знать!

С уважением, Ivo

Ответы [ 3 ]

5 голосов
/ 10 апреля 2012

Итак, я использовал обычный просмотр списка и затем анимировал представления строк при нажатии.

Я использую этот метод для анимации: Android-анимация, собственно выпадающий / вид сверху

Может быть немного сложно, если высота для выпадающего вида равна 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 голосов
/ 23 июня 2012

Другое решение заключается в использовании библиотеки Android-SlideExpandableListView, которую я написал: https://github.com/tjerkw/Android-SlideExpandableListView

Он основан на идеях Удинича и других.

Подробнее об этом можно прочитать в этом блоге: http://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/

2 голосов
/ 07 апреля 2011

Вы можете добавить анимацию к каждому дочернему представлению в методе bindChildView. Чтобы анимировать только дочерний элемент текущей группы - просто перехватите событие onExpand, прочитайте его дочерние элементы, сохраните идентификаторы в некотором массиве и в bindChildView - анимируйте только дочерние элементы, сохраненные в этом массиве.

...