【问题标题】:Activity Transitions not working活动转换不起作用
【发布时间】:2016-05-05 23:55:52
【问题描述】:

我正在尝试实现活动转换,但我看不到效果。这是我的第一个活动的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_architecture);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "Fade called");
            Fade fade = new Fade(2);
            fade.setDuration(3000);
            getWindow().setExitTransition(fade);
        }
    }

这是第二个活动的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image);
        setUpWindowAnimations();
    }

private void setUpWindowAnimations() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Log.i("ANIM", "slide called");
            Slide slide = new Slide(Gravity.LEFT);
            slide.setDuration(3000);
            getWindow().setEnterTransition(slide);
        }
    }

即使我设置了淡出动画,也没有淡出,而且幻灯片以默认方式工作,即方向是 BOTTOM 而不是 LEFT。

Here 是我的values/style.xmlhere 是我的v21/styles.xml

这是我的AndroidManifest.xml

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme">

为什么这些转换不起作用以及如何使它们起作用。我使用了paste.ubuntu.com,因为 SO 编辑器没有正确显示 xml。

【问题讨论】:

  • 您是否在styles.xml 中使用自定义过渡定义了样式?
  • @IgorGanapolsky 不,我没有。你可以查看我的styles.xml,我已经放了一个链接。
  • 你放的 paste.ubuntu 链接失效了。
  • @IgorGanapolsky styles.xmlv21/styles.xml
  • 这个问题解决了吗?我也有类似的问题。

标签: android android-transitions


【解决方案1】:
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this).toBundle();
this.startActivity(intent,bundle);

在两个活动之间设置好意图后添加这两行, 这会起作用。

您不能只通过startActivity(intent) 方法开始活动, 您需要使用捆绑包指定跨活动的转换。

【讨论】:

    【解决方案2】:

    setContentView 之前声明setUpWindowAnimations();

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setUpWindowAnimations();
            setContentView(R.layout.activity_architecture);
    
        }
    
    private void setUpWindowAnimations() {
            if (android.os.Build.VERSION.SDK_INT >= 21) {
                Log.i("ANIM", "Fade called");
                Fade fade = new Fade(2);
                fade.setDuration(3000);
                getWindow().setExitTransition(fade);
            }
        }
    

    其他解决方案

    创建一个xmlTransition 并将这个xml代码放在那里

    <?xml version="1.0" encoding="utf-8"?>
    <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:interpolator="@android:interpolator/accelerate_decelerate">
        <fade android:fadingMode="fade_out"/>
        <slide android:slideEdge="bottom"/>
    </transitionSet>
    

    这应该是Api21 的样式

        <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
            <item name="android:windowContentTransitions">true</item>
            <item name="android:windowTransitionBackgroundFadeDuration">1000</item>
        </style>
    </resources>
    

    然后把这段代码放在你的activity中setCreateView之前

    if (Build.VERSION.SDK_INT >= 21) {
    
                TransitionInflater inflater = TransitionInflater.from(this);
                Transition transition = inflater.inflateTransition(R.transition.transition_a);
                getWindow().setExitTransition(transition);
            }
    

    这应该在setCreateView之前的其他活动中

    if(Build.VERSION.SDK_INT >= 21){
                Slide slide = new Slide();
                slide.setDuration(1000);
                getWindow().setEnterTransition(slide);
            }
    

    【讨论】:

    • 它也不起作用。我将滑动方向更改为向左,它仍然从底部滑动。
    • 为什么要在setCreateView之前??
    • 你在 21> 设备上测试它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    相关资源
    最近更新 更多