Android转场效果无法工作。

3

I have two scenes:

Scene1.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        style="@style/AppTheme.TopPanel"
        android:id="@+id/top_panel"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </RelativeLayout>

    <RelativeLayout
        style="@style/AppTheme.Panel"
        android:id="@+id/bottom_panel"
        android:layout_width="match_parent"
        android:layout_height="72dp">
    </RelativeLayout>

</LinearLayout>

Scene2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        style="@style/AppTheme.TopPanel"
        android:id="@+id/top_panel"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </RelativeLayout>

    <RelativeLayout
        style="@style/AppTheme.Panel"
        android:id="@+id/bottom_panel"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </RelativeLayout>

</LinearLayout>

我还有一个包含唯一Fragment的活动。当程序开始时,我将这个Fragment替换为我的FirstFragment类。里面有一个按钮。当你点击它时,会执行以下代码:

@Override
public void onClick(View v) {
    ChangeBounds transitions = new ChangeBounds();
    transition.addListener(new Transition.TransitionListener() {
        //Other overrides...
        @Override
        public void onTransitionEnd(Transition transition) {
            SecondFragment fragment = new SecondFragment();
            getFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .addToBackStack(null)
                    .commit();
        }
        //Other overrides...
    });
    ViewGroup sceneRoot = (ViewGroup) getView();
    Scene from = Scene.getSceneForLayout(sceneRoot, R.layout.scene1, getActivity());
    Scene to = Scene.getSceneForLayout(sceneRoot, R.layout.scene2, getActivity());
    from.enter();
    TransitionManager.beginDelayedTransition(sceneRoot, transitions);
    to.enter();
}

但是过渡并没有发生。它开始了,下一刻就结束了。这里是实际效果:

enter image description here

我的错误在哪里?


调试并检查 TransitionManager.beginDelayedTransition(getView(), transitions); 这行代码中的 transitions 值。 - Maveňツ
1个回答

2
在实现第一场景和第二场景之间的过渡之前,首先需要添加一些代码将布局从“layout”文件加载到一个场景实例中。仍然在“SceneTransitionsActivity.java”文件中。
可以尝试这种方法:
package com.example.scenetransitions;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.transition.Scene;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.transition.TransitionInflater;
import android.transition.TransitionManager;

public class SceneTransitionsActivity extends Activity {

ViewGroup rootContainer;
Scene scene1;
Scene scene2;
Transition transitionMgr;

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

    rootContainer = (ViewGroup) findViewById(R.id.rootContainer);

    transitionMgr = TransitionInflater.from(this)
            .inflateTransition(R.transition.transition);

    scene1 = Scene.getSceneForLayout(rootContainer,R.layout.scene1_layout, this);

    scene2 = Scene.getSceneForLayout(rootContainer,R.layout.scene2_layout, this);

    scene1.enter();
}

public void goToScene2 (View view)
{
    TransitionManager.go(scene2, transitionMgr);
}

public void goToScene1 (View view)
{
    TransitionManager.go(scene1, transitionMgr);
}
.
.
.
}

参考:这里这里


我无法在onCreate中进入场景。我有一个布局作为主要布局,我在onCreate中使用它,并且有两个布局来动画化片段更改。根据我的理解,过渡框架应该先进入第一个场景,然后调用beginDelayedTransition,然后再进入第二个场景。但是它不起作用。 - Nolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接