Android平滑宽度变化动画
Posted
技术标签:
【中文标题】Android平滑宽度变化动画【英文标题】:Android smooth width change animation 【发布时间】:2013-08-20 13:18:33 【问题描述】:有人知道如何在 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();
【问题讨论】:
ObjectAnimator(ValueAnimator)相当流畅。你能展示一些关于你如何使用它们的示例吗?另外,您处于什么操作系统级别? 我已编辑帖子了解更多详情 【参考方案1】:您可以使用droidQuery 更方便地使用ValueAnimator
s 制作动画。您还可以一次为多个值设置动画,包括LayoutParam
属性。例如:
$.with(dragView).animate(/* CSS-Style animation attributes*/" width : " + width + " ",
/* duration (ms) */400,
/* Easing */$.Easing.LINEAR,
/* on Complete */$.noop());
您可以向 CSS 字符串添加其他属性,它们都将作为集合的一部分进行动画处理。 CSS 修饰符,例如 px、em 等,也可以使用。最后,查看其他 animate() 方法以获得更多便利。
【讨论】:
以上是关于Android平滑宽度变化动画的主要内容,如果未能解决你的问题,请参考以下文章