有人知道如何在Android上实现平滑的宽度变化动画吗?我已经使用自定义动画类或者通过ValueAnimator + AnimatorUpdateListener检查了几个示例 - 但是他们的工作并不顺利,尤其是在同时处理多个其他动画的情况下。
有什么想法吗?感谢
我正在使用下一个代码为列表中的项目设置动画(即使是4个项目也不顺畅),有时也会出现动画,从上到下翻译视图 - 而且它也不顺畅(但如果是没有列表项宽度变化的翻译动画工作 - 它很顺利):
public void showDragHold() {
isOnDrag = true;
int width = -1;
int duration = 0;
LinkedList<Animator> valueAnimators = new LinkedList<Animator>();
for (View view : views) {
View dragView = view.findViewById(R.id.list_handle_drag);
if (width < 0) {
width = dragView.getResources().getDimensionPixelSize(R.dimen.drag_width);
duration = dragView.getResources().getInteger(R.integer.anim_fast_duration);
}
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, width);
valueAnimator.addUpdateListener(new ResizeUpdateAnimator(dragView));
valueAnimators.add(valueAnimator);
}
if (!valueAnimators.isEmpty()) {
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(valueAnimators);
animatorSet.setDuration(duration);
animatorSet.start();
}
}
private static final class ResizeUpdateAnimator implements ValueAnimator.AnimatorUpdateListener {
private View view;
public ResizeUpdateAnimator(View view) {
this.view = view;
}
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
final int newWidth = (Integer) valueAnimator.getAnimatedValue();
view.getLayoutParams().width = newWidth;
view.requestLayout();
}
}
答案 0 :(得分:0)
您可以使用droidQuery更方便地使用ValueAnimator
进行动画处理。您还可以一次为多个值设置动画,包括LayoutParam
属性。例如:
$.with(dragView).animate(/* CSS-Style animation attributes*/"{ width : " + width + " }",
/* duration (ms) */400,
/* Easing */$.Easing.LINEAR,
/* on Complete */$.noop());
您可以向CSS字符串添加其他属性,它们都将作为集合的一部分进行动画处理。 CSS修饰符(如px,em等)也可以使用。最后,查看其他animate()方法以获得更多便利。