片段向下滑动动画

时间:2014-02-06 20:59:25

标签: android animation android-fragments

我正在开发一个显示片段的应用。一旦用户单击片段上的按钮,该片段将向下滑动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>

1 个答案:

答案 0 :(得分: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的一个含义是它是私有的。