2014-02-06 154 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