我在使用事务替换片段时使用幻灯片动画
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?
答案 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>