需求是这样的,在ListView上面部分还有其它的内容比如一些按钮等控件,一开始是隐藏的,点击某个按钮的时候它就慢慢向下显示出来,ListView则向下移动变成第二张图片,关闭的时候就相反。
思路和主要的代码。
1、动态改变View的高度。
ll_view.getLayoutParams().height = h; ll_view.requestLayout();
2、在布局里设置隐藏View的高度
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<!--隐藏的View部分,设置它的weight为0-->
<LinearLayout
android:id="@+id/ll_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0"
android:orientation="vertical"
android:background="@android:color/darker_gray"/>
<!--ListView-->
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list_view"/>
</LinearLayout>
3、使用属性动画来添加向下移动的效果
private void performAnim2(){
//View是否显示的标志
show = !show;
//属性动画对象
ValueAnimator va ;
if(show){
//显示view,高度从0变到height值
va = ValueAnimator.ofInt(0,height);
}else{
//隐藏view,高度从height变为0
va = ValueAnimator.ofInt(height,0);
}
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
//获取当前的height值
int h =(Integer)valueAnimator.getAnimatedValue();
//动态更新view的高度
ll_view.getLayoutParams().height = h;
ll_view.requestLayout();
}
});
va.setDuration(1000);
//开始动画
va.start();
}
总结
这一效果也可以写一个继承动画的类来动态更新view的高度,也可以使用滚动来动态显示view,不过这部分比较麻烦,在滚动的时候需要动态改变Listview的高度,因为scrollBy是滚动的是view的内容。最终我就采取上文的方法,相对比较简单一些。