【问题标题】:Android fragment animation layerAndroid片段动画层
【发布时间】:2016-06-21 17:27:13
【问题描述】:

如何改变片段动画层。我的意思是,如果第一个 old 片段正在消失,那么 new 片段就会越过它们。

【问题讨论】:

标签: android animation fragment translate


【解决方案1】:

使用片段之间的共享元素

a) 启用窗口内容转换

values/styles.xml

<style name="MaterialAnimations" parent="@style/Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:windowContentTransitions">true</item>
    ...
</style>

b) 定义一个通用的转换名称

布局/fragment_a.xml

<ImageView
        android:id="@+id/small_blue_icon"
        style="@style/MaterialAnimations.Icon.Small"
        android:src="@drawable/circle"
        android:transitionName="@string/blue_name" />

布局/fragment_b.xml

<ImageView
        android:id="@+id/big_blue_icon"
        style="@style/MaterialAnimations.Icon.Big"
        android:src="@drawable/circle"
        android:transitionName="@string/blue_name" />

c) 使用共享元素开始片段

为此,您需要在FragmentTransaction 过程中包含共享元素转换信息。

FragmentB fragmentB = FragmentB.newInstance(sample);

// Defines enter transition for all fragment views
Slide slideTransition = new Slide(Gravity.RIGHT);
slideTransition.setDuration(1000);
sharedElementFragment2.setEnterTransition(slideTransition);

// Defines enter transition only for shared element
ChangeBounds changeBoundsTransition = TransitionInflater.from(this).inflateTransition(R.transition.change_bounds);
fragmentB.setSharedElementEnterTransition(changeBoundsTransition);

getFragmentManager().beginTransaction()
        .replace(R.id.content, fragmentB)
        .addSharedElement(blueView, getString(R.string.blue_name))
        .commit();

输出:

更多详情请访问:https://github.com/lgvalle/Material-Animations

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多