2014-02-06 157 views
3

我正在處理顯示片段的應用程序。一旦用戶單擊片段上的按鈕,該片段將向下滑動80%,顯示下面的另一個片段。我遇到的問題是,當我點擊按鈕片段滑落80%,但屏幕後,只有第二個片段顯示重繪。任何幫助?片段滑動動畫

我提供了單擊按鈕時運行的代碼。和動畫文件

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    switch(v.getId()) 
    { 
     case R.id.button1: 

      ProfileFragment pro = new ProfileFragment(); 


    ((MainActivity) getActivity()).tra =((MainActivity) ()).fragmentManager.beginTransaction();       

      ((MainActivity) getActivity()).mFragmentStack.add(pro.toString()); 
    getActivity()).tra.setCustomAnimations(R.anim.slide_in_top, R.anim.slide_out_bottom); 
      ((MainActivity) getActivity()).tra.replace(R.id.fragment_swap,pro); 

      ((MainActivity) getActivity()).tra.addToBackStack(pro.toString()); 
      ((MainActivity) getActivity()).tra.commit(); 

      break; 

    } 

} 

Slide_out_bottom:

 <?xml version="1.0" encoding="utf-8"?> 
     <set xmlns:android="http://schemas.android.com/apk/res/android" > 

      <translate 
       android:duration="900" 
       android:fromYDelta="0%" 
       android:toYDelta="80%" 
      /> 


     </set> 

slide_in_top:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<translate 
    android:duration="900" 
    android:fromYDelta="0%" 
    android:toYDelta="0%" /> 
</set> 

回答

0

它看起來對我來說,你的slide_in_top動畫文件有錯誤。你將從0%降到0%。或者換句話說,根本不動。如果你不想要的動畫,你可以在電話setCustomAnimations()指定爲0,像這樣:

setCustomAnimations(0, R.anim.slide_out_bottom);

而且,理智的愛,請不要讓鑄造getActivity到MainActivity。相反,像這樣做:

ProfileFragment pro = new ProfileFragment(); 

MainActivity main = (MainActivity) getActivity(); 

main.mFragmentStack.add(pro.toString()); 

main.fragmentManager.beginTransaction() 
    .setCustomAnimations(R.anim.slide_in_top, R.anim.slide_out_bottom) 
    .replace(R.id.fragment_swap,pro) 
    .addToBackStack(pro.toString()) 
    .commit(); 

您還可能要使用上在MainActivity公共字段變量存儲事務重新考慮。這不是很好的封裝,在這種情況下,它看起來沒有必要。當然,mFragmentStack不應該通過公開直接訪問。前綴m的一個含義是它是私人的。

+0

第一個片段仍然消失 – Samantha

+0

我開始懷疑你是否可以用'replace()'命令完成你正在討論的'FragmentTransaction'。根據我的理解,替換「Fragments」的動畫,然後刪除原始片段。在第二個「FrameLayout」的第二個片段上放置一個「FrameLayout」中的第一個片段,然後將整個第一個「FrameLayout」向下動畫以顯示第二個片段。這種方式,碎片不會被刪除。 – SDJMcHattie

+0

閱讀[documentation](http://developer.android.com/reference/android/app/FragmentTransaction.html#replace(int,%20android.app.Fragment,%20java.lang.String)),你會看到第一個片段被調用了'.remove()' – SDJMcHattie