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
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
passiert2A - 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.
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