如何取消场景过渡动画?

4

我正在使用共享元素开始一个带有场景转换的活动,如下所示:

startActivity(new Intent(this, SecondActivity.class), 
    ActivityOptionsCompat.makeSceneTransitionAnimation(this, mImageView, "image_view_transition").toBundle());

我在SecondActivity的布局中指定了 android:transitionName="image_view_transition" 给ImageView,这样场景过渡动画就可以很好地播放到开始的活动并从其中播放出来,而无需我进行其他操作。

虽然,在某些情况下,我不想从SecondActivity返回到起始活动时播放反向场景过渡。我该如何在SecondActivity内取消此动画?

3个回答

1
SecondActivity中,您可以注册共享元素的回调函数,并在需要时取消它:
public class SecondActivity extends Activity {
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            setEnterSharedElementCallback(new SharedElementCallback() {
                @Override
                public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
                    Log.d(TAG, "onMapSharedElements()");
                    if (shouldCancelWindowTransitionOnExit) {
                        sharedElements.put("image_view_transition", null); // This will reject the transition
                    }
                }
            });
        }
        ...
    }
}

http://developer.android.com/reference/android/app/Activity.html#setEnterSharedElementCallback(android.app.SharedElementCallback) http://developer.android.com/reference/android/app/SharedElementCallback.html


0
  override fun onStart() {
    super.onStart()
    Handler().postDelayed(runnable,3000)
}

private val runnable:Runnable= Runnable (){
    if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP) {
        imgLogo?.transitionName = null
    }
}

上述代码对我有效


-1

在第二个Activity中调用finish()之后尝试调用此函数。

overridePendingTransition(R.anim.no_change, R.anim.no_change);

无更改动画为:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="0" android:duration="500"/>
</set>

抱歉,不起作用。反向动画仍在播放中。 - Radu Topor
你能否不使用以下代码设置新的空转换或空白转换:getWindow().setSharedElementExitTransition(transition); - vguzzi
1
我已经尝试了在起始 Activity 和结束 Activity 中的 Window 对象上所有的过渡设置方法,以各种组合方式来尝试,但它们都没有生效。 - Radu Topor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接