Вид не возвращается в центр после анимации - PullRequest
0 голосов
/ 15 апреля 2019

Итак, у меня есть анимированный вид, который я хочу вернуть в центр экрана после завершения анимации.Я использую этот код, чтобы переместить центр вида в центр экрана:

    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()

Это прекрасно работает в портретном режиме, но как только телефон поворачивается в горизонтальное положение, рассматриваемый вид перемещаетсягде-то в нижней левой четверти экрана вместо этого.Есть идеи, почему это может быть?Математика для получения центра экрана должна быть одинаковой или нет?

1 Ответ

1 голос
/ 15 апреля 2019

Это произошло потому, что при включении телефона ваш вид воссоздан, вы должны переопределить этот метод в своей активности:

@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|screenSize" К вашему тегу активности в манифесте

редактировать

kotlin: проверить это туто

...