2015-03-03 53 views
3

我有兩個場景:Android的過渡不起作用

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> 

而且我也有一個包含唯一的活動分段。當程序開始時,我用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

哪裏是我的錯?

+0

調試並檢查TransitionManager.beginDelayedTransition(getView(),transitions)中是否有'transitions'的值;這條線。 – Gattsu 2015-03-03 09:03:43

回答

2

在實現第一個場景和第二個場景之間的轉換之前,首先需要添加一些代碼以將layout文件中的佈局加載到Scene實例中。保留在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); 
} 
. 
. 
. 
} 

參考:this & this

+0

我無法在onCreate中輸入場景。我有一個佈局作爲我在onCreate中使用的主要佈局,以及兩個佈局來爲片段變化設置動畫。當我理解轉換框架時,我應該輸入第一個場景,然後調用beginDelayedTransition然後輸入第二個場景。但它不起作用。 – Nolan 2015-03-03 10:43:17