Android 动画后视图不会返回到中心

Android 动画后视图不会返回到中心,android,animation,kotlin,position,android-animation,Android,Animation,Kotlin,Position,Android Animation,所以我有一个动画视图,我想在动画完成后回到屏幕的中心。我使用此代码将视图中心移到屏幕中心: val screencenterX = (FullscreenActivity.metrics.widthPixels - mContentView.width) / 2 val screencenterY = (FullscreenActivity.metrics.heightPixels - mContentView.height) / 2 val soultostartx

所以我有一个动画视图,我想在动画完成后回到屏幕的中心。我使用此代码将视图中心移到屏幕中心:

    val screencenterX = (FullscreenActivity.metrics.widthPixels - mContentView.width) / 2
    val screencenterY = (FullscreenActivity.metrics.heightPixels - mContentView.height) / 2

    val soultostartx = ObjectAnimator.ofFloat(mContentView, "x", screencenterX.toFloat()).apply {
        duration = 1
    }
    val soultostarty = ObjectAnimator.ofFloat(mContentView, "y", screencenterY.toFloat()).apply {
        duration = 1
    }

    fun toStart() = AnimatorSet().apply {
        play(soultostartx).with(soultostarty)
        start()
    }

toStart()
这在纵向模式下工作正常,但一旦手机旋转到横向模式,视图就会移动到屏幕左下角的某个位置。知道为什么吗?获取屏幕中心的数学应该是相同的,还是不同的

-----------------编辑------------------

根据ismail alaoui的回答,我在活动中添加了以下代码:

override fun onConfigurationChanged(myConfig: Configuration) {
    super.onConfigurationChanged(myConfig)
    val orient = resources.configuration.orientation
    when (orient) {
        Configuration.ORIENTATION_LANDSCAPE -> {
            (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
            println("landscape orient")
        }
        Configuration.ORIENTATION_PORTRAIT -> {
            (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
            println("portrait orient")
        }
        else -> {
            (ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
            println("else orient")
        }
    }
}

我已经添加了对println的调用,以查看是否真的调用了onConfigurationChanged,并且确实如此。但这似乎毫无效果。有什么我需要添加到when案例中的吗?

之所以会这样,是因为当您打开手机时,您的视图会被重新创建,您应该在活动中覆盖此方法:

@Override 
public void  onConfigurationChanged(Configuration myConfig) 

 { 
  super.onConfigurationChanged(myConfig); 
  int orient = getResources().getConfiguration().orientation;

  switch(orient) 
  {
   case Configuration.ORIENTATION_LANDSCAPE: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     break; 
    case Configuration.ORIENTATION_PORTRAIT:        

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
   break; 
   default:
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
       }
  }
别忘了添加android:configChange:orientation |屏幕大小 添加到清单中的活动标记

编辑


kotlin:

setRequestedOrientation在转换为kotlin时获取未解决的引用错误。你知道怎么处理吗?谢谢你的链接!