2013-06-24 54 views
0

我試圖讓消失的簡單查看滑動背後還有一個,我已經試過像任何類型的動畫,但他們都不succeded ..如何用動畫「摺疊」視圖的高度?

這是我迄今爲止嘗試:

public void slideToTop(View view){ 
     TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight()); 
     animate.setDuration(1000); 
     view.startAnimation(animate); 
     view.setVisibility(View.GONE); 
    } 

具有和不具有ReverseInterpolator

public class ReverseInterpolator implements Interpolator { 
     public float getInterpolation(float paramFloat) { 
      return Math.abs(paramFloat -1f); 
     } 
    } 

或縮放

public void scaling(View view) { 
     ScaleAnimation animation = new ScaleAnimation(0,0,1,1.5f); 
     animation.setDuration(1000); 
     animation.setFillAfter(true); 
     view.startAnimation(animation); 
    } 

或與新的API

editView.animate().translationY(-editView.getHeight()).withLayer(); 

就如何實現這一目標的任何幫助嗎?

我的佈局是一樣的東西:

<ScrollView> 
    <LinearLayout> 
    <LinearLayout> 
     <TextView/> 
     <View/> <!-- This should "disappear" sliding up behind the other one --> 
    </LinearLayout> 
    <!-- more of the previous --> 
    <LinearLayout> 
     <TextView/> 
     <View/> 
    </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

任何幫助嗎?謝謝!

回答

3

如果您希望視圖B消失,你需要一個之前繪製B觀看A後面的效果:

<RelativeLayout> 
    <ViewB /> 
    <ViewA above="ViewB"/> 
</RelativeLayout> 

,然後左右移動ViewB。我做了下面的代碼相同,即會被它自己的高度拉昇viewToMove:

public void collapse() { 
     View viewToMove= mainView.findViewById(R.id.viewToMove); 
     int pixelsToMove= viewToMove.getHeight() * -1; 
     slots.animate().yBy(pixelsToMove).setDuration(ANIMATION_DURATION_MS); 
    } 

小心,當你調用getHeight()你可能需要一個ViewTreeObserver,以得到正確的值,因爲該視圖之前次數最多被畫getHeight()只會返回0

+0

幾乎在那裏(我猜)。我以編程方式創建佈局。你知道我該如何設置高級?我做了'params.addRule(RelativeLayout.ABOVE,editView.getId());'但它不工作。 :/ – Enrichman

+0

好吧,我仍然有一些問題,但你的動畫是正確的。謝謝。 :) – Enrichman