Lollipop トランジションと TransitionListener を理解しようとしているので、2 つの単純なアクティビティを作成しました。アクティビティ A とアクティビティ B。アクティビティ A がアクティビティ B を開始します。
アクティビティ A には、ページの下部に小さな緑色のボックスがあります。アクティビティ B には、ページの上部に大きな緑色のボックスがあります
移動の遷移は、期待どおりにスムーズに機能します。
アクティビティ BI では、SharedElementEnterTransition と SharedElementReturnTransition の TransitionListener を追加しています。
私の期待は、アクティビティ B に入ると、「リスナーに入る」の onTransitionStart と onTransitionEnd が実行され、アクティビティ B から戻ると、「戻りリスナー」に onTransitionStart と onTransitionEnd が実行されることです。しかし、そうではなく、両方のリスナーが入力時と復帰時に実行されます。
なぜこのように機能するのかについての助けをいただければ幸いです。
いくつかのシステム プリントを追加しました。アクティビティ B に入ると、次のように出力されます。
12:59:22.686 #¤ ActivityB.onTransitionStart - Enter
12:59:22.686 #¤ ActivityB.onTransitionStart - Return
12:59:23.000 #¤ ActivityB.onTransitionEnd - Enter
12:59:23.000 #¤ ActivityB.onTransitionEnd - Return
アクティビティ B から戻ったときの Printous:
13:01:27.584 #¤ ActivityB.onTransitionStart - Enter
13:01:27.584 #¤ ActivityB.onTransitionStart - Return
13:01:27.894 #¤ ActivityB.onTransitionEnd - Enter
13:01:27.894 #¤ ActivityB.onTransitionEnd - Return
私の期待は、アクティビティAに入るときに「Enter」を印刷し、アクティビティBから戻るときに「戻る」だけを印刷することです.
これが私のコードです:
アクティビティ A:
public class ActivityA extends Activity {
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
mActivity = this;
final View greenBox = findViewById(R.id.green_box_bottom);
greenBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mActivity, ActivityB.class);
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(mActivity, greenBox, "move-green-box");
startActivity(intent, options.toBundle());
}
});
}
}
アクティビティ B:
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
System.out.println("#¤ ActivityB.onTransitionStart - Enter");
}
@Override
public void onTransitionEnd(Transition transition) {
System.out.println("#¤ ActivityB.onTransitionEnd - Enter");
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
getWindow().getSharedElementReturnTransition().addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
System.out.println("#¤ ActivityB.onTransitionStart - Return");
}
@Override
public void onTransitionEnd(Transition transition) {
System.out.println("#¤ ActivityB.onTransitionEnd - Return");
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
}
レイアウト アクティビティ A:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".ActivityA">
<View
android:id="@+id/green_box_bottom"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@android:color/holo_green_light"
android:layout_alignParentBottom="true"
android:transitionName="move-green-box"/>
</RelativeLayout>
レイアウト アクティビティ B:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".ActivityB">
<View
android:id="@+id/green_box_bottom"
android:layout_width="300dp"
android:layout_height="300dp"
android:background="@android:color/holo_green_light"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:transitionName="move-green-box"/>
</RelativeLayout>