我想实现一种动画,该动画将在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。