Android 两个活动之间的共享元素转换问题
我在创建基本共享元素转换时遇到问题。从一个活动到下一个活动的转换似乎会出现故障,并重现第一个活动,而不是生成的活动 概述: 我有两个活动:Main活动和Detail活动 MainActivity承载具有CardView布局的RecyclerView。每个cardview位置的onclicklistener将一个对象设置为一个额外的意图,并启动DetailActivity。到目前为止,这一基本实现仍然有效 问题: 现在,我尝试在混合中引入共享元素转换: 原创:(不带过渡动画的作品) 问题方法:Android 两个活动之间的共享元素转换问题,android,android-intent,android-activity,shared-element-transition,Android,Android Intent,Android Activity,Shared Element Transition,我在创建基本共享元素转换时遇到问题。从一个活动到下一个活动的转换似乎会出现故障,并重现第一个活动,而不是生成的活动 概述: 我有两个活动:Main活动和Detail活动 MainActivity承载具有CardView布局的RecyclerView。每个cardview位置的onclicklistener将一个对象设置为一个额外的意图,并启动DetailActivity。到目前为止,这一基本实现仍然有效 问题: 现在,我尝试在混合中引入共享元素转换: 原创:(不带过渡动画的作品) 问题方法: p
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());
}
当我从上面的click方法中取消对animateTransition(v,I)方法的注释时,我得到了一些奇怪的行为:MainActivity在默认情况下会淡出,但随后又回到视图中。DetailActivity仍然从intent加载,但不可见。按下后退按钮似乎什么也不做(仍然可以看到MainActivity),但它会停止DetailActivity
到目前为止,我已经做了以下工作来连接所有这些:
- 在my styles.xml中启用窗口内容转换
- 在我的样式中将my_transition.xml引用为退出转换 @转换/我的_转换
- 为两个cardView中的共享元素提供了一个android:transitionName(由activity_home.xml RelativeLayout中引用的RecyclerView使用)
<?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\u 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">
请用这个试试
private void animateTransition(View view, Intent intent){
String transitionName = mContext.getString(R.string.transition_word);
Pair<View, String> pair = Pair.create((View) view, transitionName);
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(
MainActivity.this
,pair
);
mContext.startActivity(
intent
,options.toBundle());
}
private void animateTransfion(视图、意图){
String transitionName=mContext.getString(R.String.transition\u word);
Pair Pair=Pair.create((视图)视图,transitionName);
ActivityOptionsCompat选项=ActivityOptionsCompat
.MakeScenetTransitionAnimation(
主活动,这个
一对
);
mContext.startActivity(
意图
,options.toBundle());
}
问题在于如何在android清单中声明活动backbackback。首先,必须声明父活动和子活动,以便进行正确的反向导航:
<activity
android:name=".ui.activity.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activity.DetailActivity"
android:launchMode="singleTask"
android:parentActivityName=".ui.activity.HomeActivity"
android:label="@string/app_name">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="ui.activity.HomeActivity"/>
</activity>
其次,子活动的启动模式必须为“singleTask”。我以前将其设置为“singleInstance”。区别在于后者始终是其任务的唯一成员。如果在此子片段上最小化应用程序,并在以后继续,则“后退”按钮将不会记住父活动
父活动导航和sceneTransitionAnimation都使用singleTask launchMode属性。轻微修改后会出现相同的问题。我认为指定一对仅用于转换多个视图……在本例中,我只是尝试将MainActivity的cardView转换为DetailActivity。尽管本文是一篇有价值的资源,但我仍然不知道问题出在哪里。我一定错过了什么。。。
<activity
android:name=".ui.activity.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activity.DetailActivity"
android:launchMode="singleTask"
android:parentActivityName=".ui.activity.HomeActivity"
android:label="@string/app_name">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="ui.activity.HomeActivity"/>
</activity>