我有两个活动(A和B),当我点击一个按钮时,A中的元素开始动画过渡到B.但是,我想禁用从B回到A时向后播放的相同过渡。 / p>
在提出这个问题之前,我在互联网上进行了研究,发现有两种方法setSharedElementReturnTransition(transition)
和setSharedElementReenterTransition(transition)
。这些方法在适当的onCreate()
方法中使用transition = null
进行调用,并且无法正常工作。
我找到的唯一解决方案是取消转换,在finish()
而不是onBackPressed()
中调用super.onBackPressed()
。有没有其他方法可以达到预期的行为?
总而言之,当我将向后转换设置为null时,没有任何改变 - 转换未被覆盖。
编辑1.这是一段代码:
ActivtyA.java
public class ActivityA {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_A);
}
...
@Override
public void onPersonalProfileEditIconClicked() {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
View sharedView = avatarView;
String sharedElementName = getString(R.string.profile_avatar);
ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation
(ActivityA.this, sharedView, sharedElementName);
startActivity(intent, transitionActivityOptions.toBundle());
} else startActivity(intent);
}
}
ActivityB.java
public class ActivityB {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_B);
}
...
@Override
public void onBackPressed() {
finish();
}
}
在XML文件(activity_A和activity_B)中,sharedView具有属性transitionName。
的themes.xml
<resources>
<style name="theme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:windowActionModeOverlay">true</item>
<item name="android:windowContentTransitions">true</item>
</style>
</resources>
答案 0 :(得分:6)
更新支持库后,可以取消共享元素转换,而无需将super.onBackPressed();
更改为finish();
只需要设置(在我的情况下)返回/重新进入过渡到null并更改视图上的过渡名称。
getWindow().setSharedElementReturnTransition(null);
getWindow().setSharedElementReenterTransition(null);
view.setTransitionName(null);
答案 1 :(得分:-1)
您可以使用以下代码获得所需的输出: 的 ActivityA.java 强>
private void startActivityB(){
startActivity(new Intent(ActivityA.this, ActivityB.class));
overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left);
}
无需编写额外代码 的 ActivityB.java 强>
@Override
public void onBackPressed() {
//TODO
}
<强> OR 强>
如果你想在启动ActivityB后完成ActivityA,那么就是 的 ActivityA.java 强>
private void startActivityB(){
startActivity(new Intent(this, ActivityB.class));
overridePendingTransition(R.anim.slide_left_to_right, R.anim.slide_right_to_left);
finish();
}
<强> ActivityB.java 强>
@Override
public void onBackPressed() {
startActivity(new Intent(ActivityB.this, ActivityA.class));
overridePendingTransition(R.anim.slide_right_to_left, R.anim.slide_left_to_right);
finish();
}