我正在尝试为更改片段设置一个简单的动画。在/anim/文件夹下放置xml-动画文件时,抛出异常:
Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator
如果将动画文件放在 /animator/ 文件夹中,则 setCustomAnimation() 方法发誓并指出需要 /anim/ 文件夹中的动画资源。请让我知道如何让它工作。
R.anim.slide_in_left.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1500"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="y"
android:valueFrom="-1280"
android:valueTo="0"
android:valueType="floatType"/>
</set>
R.anim.slide_in_right.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="300"
android:interpolator="@android:anim/accelerate_interpolator"
android:propertyName="alpha"
android:valueTo="0"
android:valueType="floatType"/>
<objectAnimator
android:duration="1500"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueFrom="0"
android:valueTo="1280"
android:valueType="floatType"/>
</set>
mainActivity.java 文件:
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity
{
Fragment1 f1;
Fragment2 f2;
FragmentTransaction fm;
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
f1 = new Fragment1();
f2 = new Fragment2();
fm = getSupportFragmentManager().beginTransaction();
fm.setCustomAnimations( R.anim.slide_in_left, R.anim.slide_in_right );
fm.replace( R.id.fragCont, f1 );
fm.addToBackStack( null );
fm.commit();
Button btn = ( Button ) findViewById( R.id.btn );
btn.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick( View v )
{
fm = getSupportFragmentManager().beginTransaction();
fm.setCustomAnimations( R.anim.slide_in_left, R.anim.slide_in_right );
if ( f1.isVisible() )
{
fm.replace( R.id.fragCont, f2 );
} else
{
fm.replace( R.id.fragCont, f1 );
}
fm.commit();
}
} );
}
}
显然,支持库 (android.support.v4.app.FragmentTransaction) 中的 FragmentTransaction 仅适用于 anim 目录中的资源,因为 Android 3.1 XML 动画资源应放在 animator 目录中,而 android.support.v4 不起作用与 .app.FragmentTransaction。要使用这些资源,您必须使用标准的 android.app.FragmentTransaction。将片段类更改为 android.app.* 并且它有效。