我有两个活动(A和B),当我点击一个按钮时,来自A的元素开始动画过渡到B。然而,我想要在从B返回A时禁用相同的反向过渡播放。
在提出这个问题之前,我在互联网上进行了研究,并发现有两种方法setSharedElementReturnTransition(transition)和setSharedElementReenterTransition(transition)。这些方法在适当的活动onCreate()方法中调用,其参数为transition = null,但这并没有起作用。
我找到的唯一解决方案是,在onBackPressed()中调用finish()而不是super.onBackPressed()来取消过渡。是否还有其他方法实现所需的行为?
总之,当我将后退转换设置为null时,什么也没有改变-过渡未被覆盖。
编辑1. 这是代码:
ActivtyA.java
在XML文件(activity_A和activity_B)中,sharedView具有属性transitionName。
themes.xml
在提出这个问题之前,我在互联网上进行了研究,并发现有两种方法setSharedElementReturnTransition(transition)和setSharedElementReenterTransition(transition)。这些方法在适当的活动onCreate()方法中调用,其参数为transition = null,但这并没有起作用。
我找到的唯一解决方案是,在onBackPressed()中调用finish()而不是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>
onBackPressed()
中使用了finish()
。 - AJay