Animation animation = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
ViewGroup.LayoutParams params = slidingPane.getLayoutParams();
int calculatedHeight = expandedHeight - ((int) (expandedHeight * interpolatedTime));
if (calculatedHeight <= collapsedHeight) {
calculatedHeight = collapsedHeight;
}
params.height = calculatedHeight;
slidingPane.setLayoutParams(params);
slidingPane.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
animation.setDuration(ANIMATION_DURATION);
animation.setAnimationListener(animationListener);
slidingPane.startAnimation(animation);
SlidingPane
是LinearLayout
,作为孩子有ListView
。 ListView
包含每行中的图像。
现在这段代码工作得很好,但动画不顺畅。如果我从列表视图中删除图像,那么它工作正常。
我已经根据类似问题的答案尝试了以下事项 -
1.在动画之前隐藏滑动窗格的内容,然后在动画结束时再次显示它们。它有所帮助,但行为看起来很奇怪
2.在xml中设置android:animateLayoutChanges="true"
,但不设置任何动画
无论如何都有解决这个问题的方法吗?
答案 0 :(得分:0)
您应尝试使用更系统化的动画,而不是手动更改每个动画步骤的高度,例如ValueAnimator
或ObjectAnimator
:
slidingPane.animate().scaleY(0f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(ANIMATION_DURATION);
您可以在视图上使用pivotY
/ pivotY
来控制缩放动画的定位点。
相关文档: https://developer.android.com/reference/android/animation/ValueAnimator.html https://developer.android.com/reference/android/animation/ObjectAnimator.html https://developer.android.com/guide/topics/graphics/prop-animation.html