没有ViewPager的Android幻灯片动画

时间:2014-04-08 17:46:38

标签: android android-animation

我有一个活动,我正在展示36个微调器。有一个“上一个”和一个“下一个”按钮,点击这将改变一些微调器的选择。

我想实现一个滑动过渡,其中单击任一按钮会将页面滑出,然后滑入另一个。我是动画新手,我不知道如何做到这一点。请帮忙。

另外,我不想使用ViewPager,因为正如我所说,我的布局有36个微调器,每次初始化所有这些都很昂贵。

我基本上想要的是它看起来像一个新页面正在滑动,但实际上相同的布局得到“刷新”。

有人可以帮我吗?任何想法,资源或代码将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

使用Fragment子类来实现此目的。每次按下" next"按钮创建新的Fragment子类实例通过Fragment.setArguments(Bundle)向它传递必要的参数。使用Fragment生命周期方法创建并填充您的视图。你可以阅读它here。创建Fragment子类实例后,使用FragmentManager将其添加到具有以下动画的活动中:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.fragment_enter, R.anim.fragment_exit, R.anim.fragment_pop_enter, R.anim.fragment_pop_exit);
transaction.replace(R.id.activity_main_content, new MyFragmentSubclass().addToBackStack(null)
            .commit();
  

fragment_enter.xml

<set>
    <translate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="100%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXDelta="0" />
</set>
  

fragment_exit.xml

<set>
    <translate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXDelta="-100%" />
</set>
  

fragment_pop_enter.xml

<set>
    <translate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="-100%"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXDelta="0" />
</set>
  

fragment_pop_exit.xml

    <set>
    <translate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXDelta="100%" />
</set>