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事务中设置自定义动画。这只能使用动画资源进行设置。