71

我正在尝试让自定义动画与我的片段一起使用。

我已按照在线教程进行操作,但出现以下错误:

java.lang.RuntimeException:未知的动画师名称:翻译

动画的 XML 如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
    android:fromXDelta="100%"
    android:toXDelta="0"
    android:duration="300" />
</set>

Java文件如下所示:

public void goCategory(View v) {        
    FragmentTransaction ft = fm.beginTransaction();     
    ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left);              
    ft.show(fragment);
    ft.commit();
}

我无法理解其他线程中的解决方案。如果有人可以为我简化它,我将非常感激。

4

3 回答 3

117

可能您正在混合两个 api。有两种情况:

  • 如果目标低于 3.0使用支持 v4 片段:您必须使用旧动画 api,即您正在使用的那个(它们进入 anim/ 和 are R.anim.thing

  • 如果您的目标是 3.0 以上使用原生片段:您必须使用新的动画 api,即 ObjectAnimators(它们进入 animator/ 和 are R.animator.thing)。

于 2013-12-01T16:40:50.270 回答
115

它不起作用,你应该使用对象动画师

动画师/slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="1000"
        android:valueTo="0"
        android:valueType="floatType" />

</set>

动画师/slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-1000"
        android:valueType="floatType" />

</set>

类子类别

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            // return super.onCreateView(inflater, container, savedInstanceState);

            View view = (ViewGroup) inflater.inflate(R.layout.product_frame, null);
            getFragmentManager().beginTransaction()
                    .replace(R.id.sub_header, new Sub_Header()).commit();
            getFragmentManager()
                    .beginTransaction()
                    .setCustomAnimations(R.animator.slide_in_left,
                            R.animator.slide_out_right, 0, 0)
                    .replace(R.id.product_frame, new Sub_Catagory_Grid()).commit();

            view.getWidth();
            return view;

        }
于 2013-11-04T14:29:14.890 回答
0

正如@minivac 回答的那样,您正在混合使用两个 API。请查看 Android 培训指南中的Display Card Flip Animations示例,以进一步了解如何将自定义动画添加到片段事务中。它完全解决了您的问题。

于 2015-02-17T21:40:31.443 回答