Android 安卓如何根据屏幕大小设置objectAnimator的valueFrom和valueTo?

Android 安卓如何根据屏幕大小设置objectAnimator的valueFrom和valueTo?,android,animation,android-fragments,objectanimator,Android,Animation,Android Fragments,Objectanimator,我在替换片段时使用幻灯片动画 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager .beginTransaction(); transaction.setCustomAnimations( R.anim.anim_from_left, R.anim.anim_to_r

我在替换片段时使用幻灯片动画

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction transaction = fragmentManager
            .beginTransaction();
    transaction.setCustomAnimations(
            R.anim.anim_from_left, R.anim.anim_to_right);
    transaction.replace(R.id.frame_drugstore, fragment).commit();
来自左侧的片段动画:

<?xml version="1.0" encoding="utf-8"?>
<set>

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationX"
        android:valueType="floatType"
        android:valueFrom="-720"
        android:valueTo="0" />

</set>
右侧片段的动画:

<?xml version="1.0" encoding="utf-8"?>
<set>

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationX"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="720" />

</set>
在我的Galaxy Nexus 1280×720上,它可以根据需要工作。我想到的是没有720px宽屏幕的设备


如何根据屏幕大小设置objectAnimator的valueFrom和valueTo?

以编程方式获取屏幕尺寸

Display display = ((Activity) yourContext).getWindowManager ().getDefaultDisplay ();
            Point size = new Point ();
            display.getSize (size);
            int screenWidth = size.x;
            int screenHeight = size.y;

由于您需要随时更改ObjectAnimator中的值,因此我认为您最好通过以下方式以编程方式创建它:

ObjectAnimator oa=ObjectAnimator.OffloftMenuFragmentContainer,xFraction,0,0.25f

这句话是借用自


获取设备屏幕宽度的方法有很多种,但最简单的方法是详细的

我认为翻译动画更适合您的场合。您可以尝试以下平移动画:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/accelerate_decelerate_interpolator"
   android:duration="1000"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="0"
   android:toXDelta="100%"
   android:interpolator="@android:anim/accelerate_decelerate_interpolator"
   android:duration="1000"/>
</set>
这适用于从左到右的动画:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/accelerate_decelerate_interpolator"
   android:duration="1000"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="0"
   android:toXDelta="100%"
   android:interpolator="@android:anim/accelerate_decelerate_interpolator"
   android:duration="1000"/>
</set>
这适用于从右向左的动画:

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

但此解决方案给出了以下错误:java.lang.RuntimeException:未知的动画师名称:translate@JoeRichard真奇怪。我在我的应用程序中使用翻译动画制作片段动画,效果很好。也许你可以参考这篇文章:,看看最后的答案。好的,我认为您只需要将这两个动画移动到res/anim文件夹中,如果它们当前位于res/animator,请尝试一下。这是动画的路径:/res/anim/anim_from_left.xml获取此错误:12-08 16:42:15.710:E/AndroidRuntime32411:致命异常:main 12-08 16:42:15.710:E/AndroidRuntimeException:无法启动活动组件信息{com.globalsolutions.medapp/com.globalsolutions.medapp.MainActivity}:java.lang.RuntimeException:未知动画师名称:translate检查support v4片段和平台片段Api 19的源代码后,我相信这个问题可以通过使用support v4 fragments解决。这对上面的解决方案不起作用,因为它试图在fragment事务中设置自定义动画。这只能使用动画资源进行设置。