【问题标题】:How do you cancel a scene transition animation?如何取消场景过渡动画?
【发布时间】:2015-10-21 09:27:31
【问题描述】:

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

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

我在 SecondActivity 的布局中为 ImageView 指定了 android:transitionName="image_view_transition",因此场景过渡动画可以在开始的活动之间很好地播放,而无需我做任何其他事情。

尽管在某些情况下,我不想播放从SecondActivity 回到起始 Activity 的反向场景转换。如何从SecondActivity 中取消此动画?

【问题讨论】:

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


    【解决方案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

    【讨论】:

      【解决方案2】:
        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
          }
      }
      

      上面的代码对我有用

      【讨论】:

        【解决方案3】:

        在第二个Activity 中调用finish() 后尝试调用它。

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

        no_change 动画是:

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

        【讨论】:

        • 抱歉,没用。反向动画仍在播放中。
        • 你不能用getWindow().setSharedElementExitTransition(transition);设置一个新的空转换或一个空白转换
        • 我尝试了Window对象的所有转场设置方法,无论是在起始Activity还是在结束Activity,各种组合,都没有生效。
        猜你喜欢
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        相关资源
        最近更新 更多