Подтвердить что ты не робот

Анимирование дочерних элементов расширяемого списка при свертывании/расширении

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

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

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

С уважением, Иво

4b9b3361

Ответ 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 - оставьте только дочерние элементы, сохраненные в этом массиве.