像Google Now Launcher Menu Animation这样的Android 3D动画

win*_*ton 2 3d animation android

我需要像这样在Activities或Fragments之间制作动画.我用Android Api >=14.

http://www.youtube.com/watch?v=cNMqIv5Ocnk - 它是Nexus5启动器

我已经尝试过使用Android ObjectAnimator的动画,但它与这个视频动画并不是很相似.

提前致谢.

我试过这段代码

(gla_on.xml):

<objectAnimator
    android:duration="0"
    android:propertyName="alpha"
    android:valueFrom="1.0"
    android:valueTo="0.0" />
<objectAnimator
    android:duration="1000"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleY"
    android:valueFrom="1"
    android:valueTo="12" />
<objectAnimator
    android:duration="1000"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleX"
    android:valueFrom="1"
    android:valueTo="12" />
Run Code Online (Sandbox Code Playgroud)

gla_off.xml:

<objectAnimator
    android:duration="0"
    android:propertyName="alpha"
    android:valueFrom="0.0"
    android:valueTo="1.0" />
<objectAnimator
    android:duration="1000"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleY"
    android:valueFrom="1"
    android:valueTo="12" />
<objectAnimator
    android:duration="1000"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:propertyName="scaleX"
    android:valueFrom="1"
    android:valueTo="12" />
Run Code Online (Sandbox Code Playgroud)

并把它放入这段代码中:

getFragmentManager()
        .beginTransaction()
        .setCustomAnimations(R.anim.gla_on, R.anim.gla_off)
        .replace(R.id.container, new NextFragment())
        .addToBackStack(null)
        .commit();
Run Code Online (Sandbox Code Playgroud)

但是NextFragment没有显示

win*_*ton 6

关闭

经过多次尝试,我找到了决定.

(您可以在此处观看结果 - http://www.youtube.com/watch?v=Npn0c68OkYs)

我在Android的资源文件夹中创建4个动画动画

gla_there_come.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        android:duration="500"
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleY"
        android:valueFrom="0"
        android:valueTo="1" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleX"
        android:valueFrom="0"
        android:valueTo="1" />

</set>
Run Code Online (Sandbox Code Playgroud)

gla_there_gone.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        android:duration="500"
        android:propertyName="alpha"
        android:valueFrom="1.0"
        android:valueTo="0.0" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleY"
        android:valueFrom="1"
        android:valueTo="12" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleX"
        android:valueFrom="1"
        android:valueTo="12" />

</set>
Run Code Online (Sandbox Code Playgroud)

gla_back_gone.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        android:duration="500"
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleY"
        android:valueFrom="12"
        android:valueTo="1" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleX"
        android:valueFrom="12"
        android:valueTo="1" />

</set>
Run Code Online (Sandbox Code Playgroud)

gla_back_come.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        android:duration="500"
        android:propertyName="alpha"
        android:valueFrom="1.0"
        android:valueTo="0.0" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleY"
        android:valueFrom="1"
        android:valueTo="0" />
    <objectAnimator
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="scaleX"
        android:valueFrom="1"
        android:valueTo="0" />

</set>
Run Code Online (Sandbox Code Playgroud)

我将下面的代码添加到FragmentActivity中:

public void goToNext() {
    mShowingNext = true;

    getFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.gla_there_come, R.anim.gla_there_gone)
            .replace(R.id.container, new NextFragment())
            .commit();
}

public void goBack() {
    mShowingNext = false;

    getFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.gla_back_gone, R.anim.gla_back_come)
            .replace(R.id.container, new MainFragment())
            .commit();
}
Run Code Online (Sandbox Code Playgroud)