我想实现一种动画,该动画将在Android中滑动打开或展开ListView。目前,我正在使用比例动画(如下所示)

    Animation slideDown = new ScaleAnimation(1.0f, 1.0f, 0.0f, 1.0f);
    slideDown.setDuration(1000);


但这不起作用有两个原因:

1)我希望第一个项目淡入,然后下拉列表。如果我在动画中进行淡入淡出,则会显示整个列表,然后跳回到顶部并缩小到完整大小

2)我并不是真正想要扩展,我只是想通过在底部动画来显示ListView(如果这样的话)。

有没有一种方法可以让我仅在底部边缘或类似位置执行TranslateAnimation?我调查了可绘制的Clip资源,但这似乎不符合我的需求(我不确定如何将其应用于ListView)。我使用的是普通的ListView,而不是ExpandableListView,因为我只有一组项目。

最佳答案

因此,我开始寻找不同的东西,结果发现动画高度是我的解决方案。本质上,我从列表中的一个虚拟对象开始(以便它至少有1行),然后从该行的高度到整个列表的高度为其设置动画。下面是我现在正在调用的可运行代码。

private Runnable slideDownList1 = new Runnable() {
    @Override
    public void run() {

        final ListView detail = (ListView)getView().findViewById(R.id.detail_menu_1);
            ValueAnimator va = ValueAnimator.ofInt(detail.getHeight(), detail.getHeight()*mItem.containedObjects.size());
            va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                public void onAnimationUpdate(ValueAnimator animation) {
                    Integer value = (Integer) animation.getAnimatedValue();
                    detail.getLayoutParams().height = value.intValue();
                    detail.requestLayout();
                }
            });
            va.setDuration(1000);
            va.start();
        }
};


XML只是ID为detail_menu_1的基本ListView。

10-07 20:02
查看更多