2017-09-02 10 views
0

我嘗試ValueAnimator但我無法設置多個屬性。如何setPadding使用動畫查看?

ValueAnimator animate = ValueAnimator.ofInt(leftO, left, topO, top, rightO, right, bottomO, bottom); 
    animate.setDuration(250); 
    animate.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      greenTarget.setPadding(valueAnimator.getAnimatedValue(), ? ? ?); 
     } 
    }); 
    animate.start(); 

那麼,該怎麼做呢?也許用ObjectAnimator代替?如果是這樣,如何在那裏設置Padding?

回答

0
ValueAnimator animator = ValueAnimator.ofInt(view.getPaddingRight(), _20dp); 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
{ 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator){ 
    view.setPadding(_6dp, _6dp, (Integer) 
    valueAnimator.getAnimatedValue(), 0); 
    } 
}); 
animator.setDuration(200); 
animator.start(); 
+0

我需要一次更新4個填充。這裏你只更新一個。 – Tryam

+0

setPadding(left,top,right,bottom) –

+0

如果你的意思是在傾聽者中做,你錯了。因爲那裏我們只能使用計算的值,比如'getAnimatedValue()'。我們不能使用最終值,如左,頂等 – Tryam

0

你可以嘗試使用TransitionManager誰允許開始之間的動畫屬性值(在XML例如定義的值),並改變值(例如編程定義)。

你需要你的XML的根佈局,我把它命名這裏mViewGroup和視圖的直接父的佈局類型的動畫,例如LinearLayout中:

TransitionManager.beginDelayedTransition(mViewGroup, new ChangeBound()); 

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) greenTarget.getLayoutParams(); 
params.setPadding(left, top, right, bottom); 
greenTarget.setLayoutParams(params); 

希望這有助於。