当前位置: 首页 > 知识库问答 >
问题:

片段事务动画:滑入和滑出

毛德华
2023-03-14

我查看了一些教程,了解片段之间的动画事务。我用这种方法制作动画,效果很好:

fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left,
                android.R.anim.slide_out_right);

但是我想反转这个动画:旧片段滑出到左边,新片段滑入到右边,但是R.anim文件的值似乎对我的作用域没有用处。

我怎么能做到呢?

共有3个答案

殷宾白
2023-03-14

滑入滑下。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="100%p" />
</set>

slide_in_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0%p" />
</set>

滑出,滑下。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="-100%"
        android:toYDelta="0"
        />
</set>

滑出。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="-100%p"
        />
</set>

方向=向下

            activity.getSupportFragmentManager()
                    .beginTransaction()
                    .setCustomAnimations(R.anim.slide_out_down, R.anim.slide_in_down)
                    .replace(R.id.container, new CardFrontFragment())
                    .commit();

方向=向上

           activity.getSupportFragmentManager()
                    .beginTransaction()
                    .setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up)
                    .replace(R.id.container, new CardFrontFragment())
                    .commit();
奚无尘
2023-03-14

在片段中处理动画有三种方法。

因此,需要使用其中一个内置转换,请使用setTransion()方法:

getSupportFragmentManager()
        .beginTransaction()
        .setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN )
        .show( m_topFragment )
        .commit()

还可以使用setCustomAnimations()方法自定义动画:

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.slide_up, 0, 0, R.anim.slide_down)
        .show( m_topFragment )
        .commit()

把你滑上去。xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="1280"
        android:valueTo="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

把你滑下来。xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="1280"
        android:duration="@android:integer/config_mediumAnimTime"/>

最后,还可以在单个事务中启动多个片段动画。这就产生了一种非常酷的效果,其中一个碎片向上滑动,另一个碎片同时向下滑动:

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.abc_slide_in_top, R.anim.abc_slide_out_top ) // Top Fragment Animation
        .show( m_topFragment )
        .setCustomAnimations( R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom ) // Bottom Fragment Animation
        .show( m_bottomFragment )
        .commit()

要了解更多详细信息,请访问URL

注意:-您可以根据您的要求检查动画,因为上面可能有问题。

况胡媚
2023-03-14

更新为Android v19看到这个链接通过@Sandra

您可以创建自己的动画。将动画XML文件放置在res中

从左输入。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate 
      android:fromXDelta="-100%p" android:toXDelta="0%"
      android:fromYDelta="0%" android:toYDelta="0%"
      android:duration="@android:integer/config_mediumAnimTime"/>
</set>

从右键输入。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
     android:fromXDelta="100%p" android:toXDelta="0%"
     android:fromYDelta="0%" android:toYDelta="0%"
     android:duration="@android:integer/config_mediumAnimTime" />
</set>

从左到右退出。xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate 
      android:fromXDelta="0%" android:toXDelta="-100%p"
      android:fromYDelta="0%" android:toYDelta="0%"
      android:duration="@android:integer/config_mediumAnimTime"/>
</set>

exit_to_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
     android:fromXDelta="0%" android:toXDelta="100%p"
     android:fromYDelta="0%" android:toYDelta="0%"
     android:duration="@android:integer/config_mediumAnimTime" />
</set>

您可以将持续时间更改为短动画时间

android:duration="@android:integer/config_shortAnimTime"

或者长时间的动画

android:duration="@android:integer/config_longAnimTime" 

用法(请注意,对事务调用方法的顺序很重要。在调用.replace、.commit之前添加动画):

FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right);
transaction.replace(R.id.content_frame, fragment);
transaction.addToBackStack(null);
transaction.commit();

 类似资料:
  • 我有一个,现在我已经将OnClickListener添加到这些TextViews和ImageViews中。 问题:我已经把这个应用到线性布局中,但发生的是,当我点击next按钮时,当前问题将向左滑动,然后出现一个空白屏幕,然后它将滑入并显示下一个问题,但我希望当当前问题滑出时,它应该紧跟在下一个问题之后。

  • 我正在尝试使用FragmentTransaction实现以下效果。设置自定义动画。 片段A正在显示 将片段A替换为片段B。在替换过程中,片段A应该保持可见。片段B应该从右侧滑入。片段B应该在片段A的顶部滑动。 我在动画设置中获得幻灯片没有问题。我的问题是,当幻灯片在动画中运行时,我不知道如何使片段A停留在它所在的位置,并处于片段B之下。不管我怎么做,碎片A似乎在上面。 我怎样才能做到这一点? 这是

  • 我已经编写了一些代码,可以从高度图中渲染3D世界,现在我也编写了允许行走的代码。问题是,当高度增加时,动画几乎“跳跃”,因为每个单元都相当大。有没有一种简单的方法可以让动画更流畅?(一般来说,我对OpenGL和3D渲染非常陌生,所以我不想讨论插值和更复杂的事情。)

  • 我尝试使用onTabSelected来检测某个片段何时被选中,然后在接口的帮助下从该片段启动一个方法(下面的代码)。 但是,当使用Start方法时,在尝试更新TextView时会激发NullPointerException。start方法的代码是: 在以下行抛出异常: 是的,我已经在网上查过了所有可用的东西,但似乎没有任何东西对我有用。 非常感谢您的帮助!

  • 问题内容: 我所看到的和jQuery的。左右滑动的功能/方式如何? 问题答案: 您可以使用jQueryUI中的其他效果来执行此操作: 快速示例:

  • 我试图为我的实现一个平滑的动画,但是当我增加时间(30秒)时,动画不再平滑。 5秒钟的例子: 30秒的例子: 我的进步背景: 我的进度布局: 我的动画制作方法: