如何监听 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
)。
在我的应用程序中,我需要在屏幕方向改变时执行一些操作。 所以我做了以下工作:
//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
)。