我在创建基本共享元素转换时遇到问题。从一个活动到下一个活动的转换似乎会出现故障并重现第一个活动而不是结果活动。
概述:
我有两个活动:一个 MainActivity 和一个 DetailActivity。
MainActivity 托管一个带有 CardView 布局的 RecyclerView。每个cardview位置的onclicklistener设置一个对象作为intent extra,并启动DetailActivity。到目前为止,此基本实现有效。
问题:
现在我试图在混合中引入一个共享元素过渡:
原文:(不带转场动画的作品)
public void onObjectClick(View v, int position) {
Word detailWord = mRepository.getWord(position);
Intent i = new Intent(mContext, DetailActivity.class);
i.putExtra(WORD_OBJECT, detailWord);
//animateTransition(v,i); -doesn't work
mContext.startActivity(i);
问题方法:
private void animateTransition(View view, Intent intent){
String transitionName = mContext.getString(R.string.transition_word);
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(
baseView.getActivity()
,view
,transitionName
);
mContext.startActivity(
intent
,options.toBundle());
}
当我从上面的单击方法中取消注释 animateTransition(v,i) 方法时,我得到了一些奇怪的行为: MainActivity 默认情况下会淡出,但随后又会重新出现。DetailActivity 仍然从意图加载,但不可见。按下后退按钮似乎什么都不做(仍然看到 MainActivity),但它会停止 DetailActivity。
到目前为止,我已经完成了以下操作来连接所有这些:
在我的 styles.xml 中启用了窗口内容转换
以我的风格引用 my_transition.xml 作为退出转换
@transition/my_transition
为两个 cardView 中的共享元素提供了一个 android:transitionName(由在 activity_home.xml RelativeLayout 中引用的 RecyclerView 使用)
Card_view_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
android:onClick="animateIntent"
android:clickable="true"
android:transitionName="@string/transition_word"
>
detail_activity.xml
<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=".DetailActivity"
android:transitionName="@string/transition_word">