如何取消场景转换动画?

时间:2015-10-21 09:27:32

标签: android android-animation android-design-library

我正在使用像这样的共享元素开始一个带有场景转换的活动:

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

我在android:transitionName="image_view_transition"的布局中为ImageView指定了SecondActivity,因此场景转换动画可以很好地与已启动的活动一起播放,而不需要做任何其他操作。

虽然在某些情况下,我不想播放从SecondActivity回到开始活动的反向场景转换。如何从SecondActivity内取消此动画?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
    }
}

上面的代码对我有用

答案 2 :(得分:-1)

在第二个java.nio.channels.FileChannel中调用完成()之后尝试调用此方法。

Activity

no_change动画是:

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