2012-03-14 21 views
16

在我的應用程序中有一個LinearLayout,它具有0佈局高度。當我點擊按鈕時,這個佈局高度應該是LayoutParams.WRAP_CONTENT。這是我在onclicklistner中使用的代碼。更改LinearLayout中LayoutParams的動畫

LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
slider.setLayoutParams(lp); 

我想動畫這個。我如何設置動畫到滑塊。

+1

你想要滑塊上的動畫嗎? – 2012-03-14 04:40:20

+0

@Nixit Patel yes – Chrishan 2012-03-14 04:52:59

+0

@NixitPatel:你想實現滑塊動畫? – 2012-03-14 05:00:02

回答

25

我覺得你只是想從0高度動畫着眼於它的最終高度,你可以用自定義動畫做到這一點:

public class ShowAnim extends Animation { 
    int targetHeight; 
    View view; 

    public ShowAnim(View view, int targetHeight) { 
     this.view = view; 
     this.targetHeight = targetHeight; 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     view.getLayoutParams().height = (int) (targetHeight * interpolatedTime); 
     view.requestLayout(); 
    } 

    @Override 
    public void initialize(int width, int height, int parentWidth, 
      int parentHeight) { 
     super.initialize(width, height, parentWidth, parentHeight); 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
} 

並在代碼中這樣做是爲了啓動動畫:

Animation ani = new ShowAnim(headerView, 100/* target layout height */); 
ani.setDuration(2000/* animation time */); 
headerView.startAnimation(ani); 
+1

如何在沒有它的情況下每次都從零開始做這件事?如果我這樣做了一次,目標佈局高度爲100,然後再以200的目標佈局時間,我希望它從0 - > 100,然後100 - > 200. – Andrew 2013-11-01 19:30:50

+0

如果您想要從100 - > 200,那麼只需修改這一行'view.getLayoutParams()。height =(int)(targetHeight * interpolatedTime);'就像'view.getLayoutParams()。height = initialHeight/* 100在你的情況*/+ int)(targetHeight/* 200 in your case */- initialHeight * interpolatedTime);' – Kai 2013-11-02 01:09:39

+1

當initialHeight爲0時,什麼都不起作用。根本沒有視覺上的改變。 – Andrew 2013-11-04 16:06:36

1

由於我們在android中自從JELLYBEAN開始佈局轉換,我們可以使用它來代替使用動畫對象。

下面的文章詳細解釋它。 https://proandroiddev.com/the-little-secret-of-android-animatelayoutchanges-e4caab2fddec

總之,我們只需要這個代碼 -

tView.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); 
tView.setLayoutParams(lp); 

這裏LP將是佈局PARAMS

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams 
          (RelativeLayout.LayoutParams.MATCH_PARENT, newHeight); 

還有一點要補充將在佈局中加入這一行文件,到將要進行轉換的佈局。

android:animateLayoutChanges="true"