2011-07-21 80 views
0

想象一下,你有這樣的佈局:如何使用動畫平滑地翻譯查看屏幕?

___________________________________________ 
|           | 
|           | 
|    TOP CONTENT    | 
|           | 
|_________________________________________| 
|           | 
|           | 
|     BOTTOM     | 
|     CONTENT     | 
|           | 
|_________________________________________| 

我想頂端內容滑出屏幕,我可以做成功使用翻譯動畫(XML格式的定義)。我設置了一個監聽器,以便在動畫結束時,TOP CONTENT的可見性設置爲View.GONE。我的問題是,在動畫執行過程中,TOP CONTENT佔據的區域仍然保留在屏幕上。底部內容不會隨之滑動。基本上,對於動畫執行的500毫秒,BOTTOM CONTENT停留在其位置,然後在動畫結束後突然向上移動。

我該如何使底部內容保持layout_below參數與TOP CONTENT的底部邊緣並平滑地向上滾動至TOP CONTENT?這是否需要在底部內容上使用另一個動畫?

感謝您的幫助!

回答

1

這是否需要在底部內容上使用另一個動畫?

這通常是我怎麼做,它工作正常。

+0

感謝您的回覆。我的問題是如何設置fromYDelta的百分比?你只是猜測並檢查並看看TOP CONTENT容器底部有什麼排隊? – Rockmaninoff

+0

我只是將相同的'動畫'應用於我正在動畫的視圖。這通常取決於特定的情況,但似乎你需要調整一下。試試看。 :-) – Wroclai

0

我有工作對我來說,甚至更好的使用動畫,使其順利的解決方案。

private int heightOfScreen; 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     configureLayoutListener(); 
    } 

private void configureLayoutListener() { 
     mNormalModelayoutContainer.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       heightOfScreen = mNormalModelayoutContainer.getHeight(); 
       ViewTreeObserver viewTreeObserver = mNormalModelayoutContainer.getViewTreeObserver(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
        viewTreeObserver.removeOnGlobalLayoutListener(this); 
       } else { 
        viewTreeObserver.removeGlobalOnLayoutListener(this); 
       } 
      } 
     }); 
    } 

    private void animate() { 
     View viewToShiftOut = mNormalModelayoutContainer; 
     View viewToShiftIn = mEditModelayoutContainer; 
     ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "y", 0, -heightOfScreen/2); 
     ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "y", heightOfScreen/2, 0); 
     outAnim.setDuration(1000); 
     inAnim.setDuration(1000); 
     outAnim.start(); 
     inAnim.start(); 
    } 

這適用於片段,但可以適用於任何視圖或活動。 N/B: - 注意我們如何以及從哪裏測量高度 - 進出視圖沿oppsosite方向移動,但可以沿任何指南針方向移動。