2013-08-20 143 views
0

有谁知道如何在Android上实现平滑宽度更改动画?我已经通过自定义Animation类或者ValueAnimator + AnimatorUpdateListener检查了几个例子,但是他们的工作并不顺利,特别是当同时有几个额外的动画处理时。Android平滑宽度更改动画

任何想法?谢谢

我使用下一个代码来动画列表中的项目(即使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

ObjectAnimator(ValueAnimator)非常流畅。你可以展示一些你如何使用它们的例子吗?另外,你在什么操作系统级别? – JRomero

+0

我已编辑帖子了解更多详情 – alexkipar

回答

0

您可以使用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()方法以获得更多便利。