我正在开发一个显示片段的应用。一旦用户单击片段上的按钮,该片段将向下滑动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 :(得分: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
的一个含义是它是私有的。