Android系统。如何根据屏幕大小设置objectAnimator valueFrom和valueTo?

时间:2014-12-08 10:57:09

标签: android animation android-fragments objectanimator

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

    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?

3 个答案:

答案 0 :(得分:0)

以编程方式获取屏幕尺寸

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

答案 1 :(得分:-1)

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

ObjectAnimator oa = ObjectAnimator.ofFloat(menuFragmentContainer, "xFraction", 0, 0.25f);

此行来自here

有多种方法可以获得设备的屏幕宽度,但最简单的方法是详细here

答案 2 :(得分:-2)

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

这是从左到右的动画:

<?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>