我正在通过绘图为其中包含列表视图的视图设置动画。即将高度从0设置为特定高度。当列表视图为空时,我的视图将平滑绘制。但是当填充列表视图时,我的视图动画非常慢。
这是我的动画代码
public static void expand(final View v) {
v.measure(MeasureSpec.makeMeasureSpec(android.view.ViewGroup.LayoutParams.MATCH_PARENT,
MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(500, MeasureSpec.EXACTLY));
final int targtetHeight = v.getMeasuredHeight();
v.getLayoutParams().height = 0;
v.setVisibility(View.VISIBLE);
Animation a = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
v.getLayoutParams().height = interpolatedTime == 1
? 500
: (int)(targtetHeight * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration(500);
v.startAnimation(a);
}
这是我的xml。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recent_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:visibility="gone"
android:background="#FF0000"
android:layout_marginTop="130px"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<ListView
android:id="@+id/callslist_history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/top"
android:layout_alignLeft="@+id/top"
android:layout_alignRight="@+id/top"
/>
</RelativeLayout>
我视图的初始高度是0dp然后在展开时我将其高度设置为500dp。但是这个动画只有在没有填充列表视图时才能顺利运行。
答案 0 :(得分:2)
我知道这是一个老问题,但可能的未来参考:
我有同样的问题,只是通过在framelayout中包装视图(正在设置动画)并将子的高度/宽度设置为动画的目标值而不是在动画中调整视图大小来解决它我改变了视图的位置(x / y)。