2013-08-20 193 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()方法以獲得更多便利。