如何监听 window 旋转在 android 完成?

How to listen window rotation finished in android?

在我的应用程序中,我需要在屏幕方向改变时执行一些操作。 所以我做了以下工作:

//in AndroidManifest.xml
<!-- SomeSetting -->
<activity android:configChanges="orientation|keyboardHidden|screenSize"
          android:label="@string/app_name"
          android:name="MainActivity"
          android:theme="@android:style/Theme.NoTitleBar">

//in MainActivity.java
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        doSomething();
    }

这是我的问题:
我想调用 doSomething() "after" 方向动画(如旋转或淡入淡出)完成。但它会在动画开始后立即调用。
有没有听者之类的可以听这种动画结束?

更新0223

仅供参考:

经过我的实验,我发现OnConfigurationChange不够可靠。 我将使用 View.addOnLayoutChangeListener 来获取属性(视图是我想从中读取值的组件)。然后我可以确保该值是在定向之后。顺便说一下,我仍然需要覆盖 OnConfigurationChange 以避免重新创建整个视图。 您可以 google addOnLayoutChangeListener() 了解如何使用它。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

如果您想了解更多信息,可以查看文档 here

您的 onCreate() 方法将在您的方向更改后触发。 因此,在您的情况下,您可以在 onCreate() 方法

中调用 doSomeThing()
@Override
protected void onCreate(Bundle savedInstanceState) {
      ...
      doSomething();
}

希望对您有所帮助

我猜,你想要的是在布局上绘制视图时应该调用你的 doSomeThing() 方法。

所以你需要使用View.post()方法来实现。 看看下面的示例:

fab.post(new Runnable() {
        @Override
        public void run() {
            // do something here 
            //......
            //......
            Toast.makeText(MainActivity.this, "Orientation has changed.", Toast.LENGTH_SHORT).show();
        }
    });

这里的fab是一个view,当它被绘制在屏幕上时,你想对其执行操作(所以你不需要使用TimerTask)。

正如您所说,您希望在方向改变时更新 SurfaceView。您可以使用表面视图的 post 方法(如上面代码中的 fab)。