2016-11-15 55 views
1

我當時正在關注tutorial並希望自己做一些事情。該教程向我展示瞭如何進行動畫製作。所以我做到了,現在我想恢復之前的視圖(場景)。首先是淡入新的視圖,這很好,但恢復/重置失敗。它應該這樣的表現:使用轉換框架恢復或重置場景

enter image description here

我設置onClickListener菜單條(ImageView的),並切換boolean值,以檢查是否查看是否已滿。我遇到的一個問題是,當轉換結束時,我不得不重新分配onClickListener,因爲新的佈局正在膨脹過渡。但是當我點擊三個按鈕後可以看到,它不會記錄我的點擊(通過調試我檢查)。

這裏是代碼文件:

public class HorizotalViewActivity extends AppCompatActivity implements Transition.TransitionListener, View.OnClickListener 
{ 


    boolean viewing = false; 
    ImageView goButton; 
    Scene scene, restoreScene; 

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

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


     scene = Scene.getSceneForLayout(sceneView, 
       R.layout.transition_example2, this); 

     restoreScene = Scene.getSceneForLayout(sceneView, 
       R.layout.transition_example, this); 


     goButton = (ImageView) findViewById(R.id.goButton); 


     goButton.setOnClickListener(this); 


    } 



    @Override public void onTransitionStart(Transition transition) 
    { 

    } 

    @Override public void onTransitionEnd(Transition transition) 
    { 
     goButton = (ImageView) findViewById(R.id.goButton); 


     goButton.setOnClickListener(this); 
    } 
//... 

    @Override public void onClick(View view) 
    { 
     if (!viewing) 
     { 
      TransitionManager.go(scene); 
      viewing = true; 
     } 
     else 
     { 


      TransitionManager.go(restoreScene); 

      //goToScene(restoreScene); 


      viewing = false; 
     } 
    } 
} 

這裏是XML文件:

活動佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/sceneView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 

    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.lgvalle.material_animations.HorizotalViewActivity"> 
<include layout="@layout/transition_example"/> 

</LinearLayout> 

默認佈局(transition_example.xml):

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/scene" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:id="@+id/goButton" 
      android:src="@drawable/menu" 
      android:layout_width="60dp" 
      android:layout_height="60dp" /> 

    </LinearLayout> 

Trans銀行足球比賽佈局(transition_example2.xml):

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scene" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/goButton" 
     android:src="@drawable/menu" 

     android:layout_width="60dp" 
     android:layout_height="60dp" /> 

    <ImageView 
     android:id="@+id/play" 
     android:layout_marginLeft="15dp" 
     android:src="@drawable/play" 
     android:layout_width="60dp" 
     android:layout_height="60dp" /> 
    <ImageView 
     android:id="@+id/repeat" 
     android:layout_marginLeft="15dp" 
     android:src="@drawable/repeat" 
     android:layout_width="60dp" 
     android:layout_height="60dp" /> 
    <ImageView 
     android:id="@+id/share" 
     android:layout_marginLeft="15dp" 
     android:src="@drawable/share" 
     android:layout_width="60dp" 
     android:layout_height="60dp" /> 


</LinearLayout> 

我看不出有任何問題與我的邏輯,它的自我解釋,

1 - 檢查boolean如果過渡二是已經發生

1A - 做轉換,更新boolean

2 - 如果轉換髮生

2A - 呼叫一個場景,更新boolean

現在,我想這個問題onCickListener,因爲我不能得到斷點onClickListener一旦TransitionManager.go()被調用,如果它得到註冊它可能會按預期工作。沒有logcat錯誤/警告。

回答

2

我有同樣的用我的項目,這是我發現了什麼:

發生了什麼,當你使用場景過渡,你有2個認爲將動畫集。可以說設置A(開始佈局)和設置B(結束佈局)。你在代碼中做的是你在Set A上設置了clicklisteners。但是在Scene Transition set A不再在屏幕上之後。

設置您的clicklisteners後,您的過渡將解決您的問題。 (當您使用CustomView是內容價值,你需要「複製」以及。

要做到這一點,使用Scene.setEnterAction(Runnable)方法,

scene.setEnterAction(new Runnable(){ 

@override 
void run() 
{ 

    goButton = (ImageView) scene.getSceneRoot.findViewById(R.id.goButton); 


    goButton.setOnClickListener(this); 

} 

}); 
+0

您好我解決了這一點,忘了更新,要實現這一目標,我們在兩個Scene對象上使用Scene.EnterAction(Runnable ...)。編輯你的答案,我會接受它。 – Talha