众所周知,在activity界面之间切换和fragment之间切换自身系统是给了一个动画的效果的!所有个性化需求是需要我们自己去实现!
第一:activity之间切换的动画效果
我们需要在activity之间跳转的时候去实现:如下
在点击开启另外一个界面后面,添加overridePendingTransition(R.anim.in_btn,R.anim_out_btn);
//动画资源文件是放在res/anim下,anim/in_btn如下
动画集<set xmlns:android = "http://schemas.android.com/apk/res/android">
<translate android:fromYDelta = "100%p" android:toYDelta = "0" android:duration = "2000"/>
<alpha android:fromAlpha = "0.0" android:toAlpha = "1.0" android:duration = "2000"/></set>
//动画资源anim/out_btn如下
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%p" android:toYDelta="100%p"
android:duration="2000"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="2000" />
</set>
以上,即可实现activity之间切换的动画效果
第二:Fragment之间切换的动画效果
因为fragment之间切换是需要获得管理器的–>然后就是开启一个事物–>设置其动画(有系统自带的动画或者自定义动画)–>fragment的具体操作(例如增加,删除,替换)–>提交事物commit
具体操作如下:
1,当前的activity添加fragment
//获得管理器 --》 开启事物 --》具体操作 --》提交
getFragmentManager().beginTransaction().add(R.id.fragment, new FragmentOne()).commit();
//特别说明--在当前的activity中设置其fragment的后退栈
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
2,创建fragment—>FragmentOne如下
public class FragmentOne extends Fragment implements View.OnClickListener {
private View rootView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_layout,null);
rootView.findViewById(R.id.btnAnotherFragment).setOnClickListener(this);
return rootView;
}
// Fragment加入到回退栈--addToBackStack()方法含义
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction()
//设置自定义动画 .setCustomAnimations(R.animator.animator_enter,R.animator.animator_exit,R.animator.animator_enter,R.animator.animator_exit)
//设置fragment加入回退栈
.addToBackStack("OtherFragment")
//注意此时依附的仍然是R.id.fragment
.replace(R.id.fragment, new OtherFragment())
.commit();
}
}
//其自定义属性动画效果如下
res/animator/animator_enter
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1" />
</set>
res/animator/animator_exit
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0" />
</set>
3,创建otherFragment即可
以上完成了:需要注意一下
1,设置系统自带的动画属性 getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
2,fragmentTransaction.setCustomAnimation()只能添加xml中定义的动画。
3, setCustomAnimation()必须在replace,add等方法前才会生效。
4, 使用support.v4包,则只能添加View动画,添加自定义的属性动画会报:不能识别的动画类型。