17

我正在尝试在可扩展列表视图中为我的子视图设置动画。我希望子视图在展开组时从上到下滑动,在折叠组时从下到上滑动。我已经查看了几种方法(动画视图组或子视图),但似乎没有一个效果很好,或者我做得不对。

我从 BaseExpandableListAdapter 扩展了一个类来创建我自己的自定义适配器。我还为我在 getChildView 和 getGroupView 方法中扩展的组/子项提供了自定义 (xml) 视图。

我只希望当前折叠/展开的组为它的孩子设置动画。谁能指出我正确的方向?如果您需要更多信息或代码,请告诉我!

问候,伊沃

4

3 回答 3

5

所以我所做的是使用常规列表视图,然后在单击时为行视图设置动画。

我使用这个方法来制作动画:Android animate drop down/up view proper

如果要下拉的视图的高度是 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;
}

视图应该在动画开始之前消失,然后在动画开始时可见。

编辑:我在这里做了一个完整的例子。

于 2012-04-10T15:47:48.023 回答
2

您可以在 bindChildView 方法中为每个子视图添加动画。为了只为当前组的孩子设置动画 - 只需捕获 onExpand 事件,读取它的孩子,将 id 保存在某个数组和 bindChildView 上 - 只为保存在该数组中的孩子设置动画。

于 2011-04-07T14:42:40.653 回答
2

另一种解决方案是使用我写的 Android-SlideExpandableListView 库: https ://github.com/tjerkw/Android-SlideExpandableListView

它建立在乌迪尼克和其他人的想法之上。

有关它的更多信息,请参阅此博客文章: http ://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/

于 2012-06-23T12:51:21.380 回答