2016-11-15 2 views
1

Ich folgte einem tutorial und möchte etwas Eigenes damit machen. Das Tutorial hat mir gezeigt, wie man animiert. Also habe ich das gemacht, jetzt möchte ich die vorherige Szene wiederherstellen. Das erste ist, die neuen Ansichten einzublenden, was gut funktioniert, aber das Zurücksetzen/Zurücksetzen schlägt fehl. Es sollte wie folgt verhalten:Wiederherstellen oder Zurücksetzen einer Szene mit Transition Framework

enter image description here

I onClickListener auf Menüleiste (Image) setzte und Makel boolean Wert zu überprüfen, ob Ansicht voll ist oder nicht. Ein Problem, auf das ich stieß, war, dass ich onClickListener neu zuordnen musste, wenn die Umwandlung beendet ist, weil das neue Layout im Übergang aufgebläht wird. Aber wenn ich klicke, nachdem drei Buttons sichtbar sind, registriert es meinen Klick nicht (durch Debugging habe ich überprüft).

hier ist der Code-Datei:

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; 
     } 
    } 
} 

Und hier sind XML-Dateien:

Aktivität Layout:

<?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> 

Standard-Layout (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 ition Layout (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> 

Ich kann keine Probleme mit meiner Logik sehen, seine selbsterklärend,

1 - boolean Überprüfen Sie, ob Übergang No.2 bereits geschehen ist

1A - Do Übergang, Update boolean.

2 - Wenn Übergang

passiert

2A - vorherige Szene aufrufen, aktualisieren boolean.

Nun, ich denke, es ist dieses Problem mit onCickListener, denn ich kann nicht in onClickListener zu Breakpoint erhalten, sobald TransitionManager.go() genannt wird, wenn es daran registrieren könnte wie erwartet. Es gibt keine logcat Fehler/Warnungen.

Antwort

2

hatte ich das gleiche mit meinem Projekt das, was ich herausfand, ist:

Was, wenn Sie die Szene Übergang Sie 2 View-Sets verwenden passiert haben, animieren wird. sagen wir Set A (Startlayout) und Set B (Endlayout). Was Sie in Ihrem Code tun, ist, dass Sie Ihre Click-Listener auf Set A setzen. Aber nach dem Szenen-Transition-Set ist A nicht mehr auf dem Bildschirm.

setzen Sie Ihre clicklisteners wieder nach Ihrer Umstellung wird Ihr Problem lösen. (wenn Sie ein Custom verwenden, die Inhalte Werte, die Sie zu „kopieren“ aswell müssen.

Um dies zu erreichen, verwenden Sie Scene.setEnterAction(Runnable) Methode,

scene.setEnterAction(new Runnable(){ 

@override 
void run() 
{ 

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


    goButton.setOnClickListener(this); 

} 

}); 
+0

Hallo ich dieses Problem gelöst und vergessen, zu aktualisieren, um dies zu erreichen, wir Verwenden Sie Scene.EnterAction (Runnable ...) für beide Scene-Objekte.Bearbeiten Sie Ihre Antwort und ich werde es akzeptieren. – Talha

Verwandte Themen