rotation屏幕旋转(如何:处理屏幕旋转)
本文目录
如何:处理屏幕旋转
不过,设备驱动程序为使用非纵向方向进行呈现提供了各种级别的支持,因此,您的应用程序应遵循推荐的做法来处理屏幕旋转。说明:托管Direct** 移动应用程序需要使用适用于 Pocket PC 和 Smartphone 的 Windows Mobile 5.0 版软件。有关 Windows Mobile 软件和 SDK 的信息,请参见 .NET Compact Framework 的外部资源。下面的代码示例包含在 Windows 软件开发工具包 (SDK) 中。检测屏幕是否处于已旋转状态在项目中添加对 Microsoft.WindowsCE.Forms 组件的引用。添加检测代码的最简便方法是将其放置在主窗体的 Resize 事件处理程序中。在窗体的构造函数中添加该事件处理程序的委托。 C# this.Resize += new System.EventHandler(this.MyForm_Resize); Visual Basic AddHandler02Resize,02AddressOf02Me.MyForm_Resize添加布尔型 orientationChanged 类成员变量,该变量将在方向更改时进行跟踪。使用 ScreenOrientation 属性的值确定当前方向。值为 Angle0 指示纵向模式。如果当前方向与此不同,请设置 orientationChanged 标志来将其标记下来。通常,此时不执行任何操作,因为应用程序可能在后台。不要在此处以编程方式更改方向,因为触发调整大小事件的方向更改可能尚未完成。如果您现在尝试改回原来的方向,则会发生失败。 C# // Add a class member variable to// store that the orientation has changed.bool orientationChanged = false; privatevoid MyForm_Resize(object sender, EventArgs e) { if (SystemSettings.ScreenOrientation != ScreenOrientation.Angle0) orientationChanged = true; } Visual Basic ’ Add a class member variable to ’ store that the orientation has changed. Dim OrientationChanged AsBoolean = FalsePrivateSub MyForm_Resize(ByVal sender AsObject, ByVal e As EventArgs) If (SystemSettings.ScreenOrientation 《》 ScreenOrientation.Angle0) Then orientationChanged = TrueEndIfEndSub屏幕旋转后如何操作您可以检查每个帧来确定方向是否已发生更改。下面的代码示例中的 CheckRotation 方法通过设置 ScreenOrientation 属性将屏幕方向改回了纵向模式。您应考虑根据期望的用户体验来进行其他操作。例如,您可能不希望应用程序自己更改屏幕方向,而通知用户以下情况:除非用户改回原来的方向,否则将不再继续呈现。如果您真的更改了屏幕方向,则还应保存并还原初始屏幕方向,如下面的示例所示。如果您没有更改屏幕方向,而是执行了某种其他操作,则可以正常地继续进行呈现,它可能悄悄地终止,但也可能会在失败时返回一个异常。下面的代码示例尝试将设备置于纵向模式(如果它还未处于纵向模式)。如果设备处于纵向模式,则 CheckOrientation 方法返回 true。 C# privatebool CheckOrientation() { // orientationChanged is set to true in resize if it is// detected that the orientation of the device has changed.if (orientationChanged) { // Attempt to change the display back to portrait mode.try { SystemSettings.ScreenOrientation = ScreenOrientation.Angle0; // Now that the orientation is back to portrait mode// Do not attempt to change it again. orientationChanged = false; } catch (Exception) { // Failed to change the display mode.returnfalse; } } returntrue; } // Use the CheckOrientation() method before rendering occurs.// All rendering for each frame occurs here.privatevoid Render() { // If the device is not oriented properly, // some display drivers may not work.if (!CheckOrientation()) return; // Rendering code omitted here. } Visual Basic PrivateFunction CheckOrientation() AsBoolean ’ orientationChanged issettotruein resize if it is ’ detected that the orientation of the device has changed. If orientationChanged Then ’ Attempt to change the display back to portrait mode. Try SystemSettings.ScreenOrientation = ScreenOrientation.Angle0 ’ Now that the orientation is back to portrait mode ’ Donot attempt to change it again. orientationChanged = falseCatchAs Exception ’ Failed to change the display mode. ReturnfalseEndTryEndIfReturntrueEndFunction ’ Use the CheckOrientation() method before rendering occurs. ’ All rendering foreach frame occurs here. PrivateSub Render() ’ If the device isnot oriented properly, ’ some display drivers may not work. IfNot CheckOrientation ThenReturnEndIf ’ Rendering code omitted here. EndSub应用程序退出时还原方向如果您决定以编程方式更改屏幕方向,则还应当在应用程序退出时还原初始应用程序方向。由于应用程序可能尝试在运行时更改方向,因此需要保存初始方向并在应用程序退出时将其还原。添加一个成员变量以存储初始方向。
旋转屏幕
Screen Rotation(旋转屏幕)堪称Android系统上最强悍的旋屏控制神器,它能够让你给您自由控制设备的屏幕旋转方式,支持自动、强行自动、锁定、竖屏、横屏、反向竖屏、反向横屏、自动竖屏、自动横屏、手动旋转方式,绝对是Android设备上的必装应用!主要功。
如何在启动时让android系统屏幕旋转90度
设备平放,屏幕朝正上方。以下四个常量分别代表:
private static final int ROTATION_0 = 0;//初始情况。这个时候设备是横屏还是竖屏与硬件设备安装时默认的显示方向有关。
private static final int ROTATION_90 = 1;//设置屏幕方向自动旋转后,右侧翻起侧立时,屏幕会旋转到这个方向。
private static final int ROTATION_270 = 2;//设置屏幕方向自动旋转后,左侧翻起度侧立时,屏幕会旋转到这个方向。
private static final int ROTATION_180 = 3;//设置屏幕方向自动旋转后,屏幕底部侧立时,屏幕会旋转到这个方向。
再看两个数组:
view plain
private static final int {
{{60, 165}, {165, 195}, {195, 300}},
{{0, 30}, {165, 195}, {195, 315}, {315, 360}},
{{0, 45}, {45, 165}, {165, 195}, {330, 360}},
{{0, 45}, {45, 135}, {225, 315}, {315, 360}},
};
private static final int {
{ROTATION_90, ROTATION_180, ROTATION_270},
{ROTATION_0, ROTATION_180, ROTATION_90, ROTATION_0},
{ROTATION_0, ROTATION_270, ROTATION_180, ROTATION_0},
{ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_0},
};
当前屏幕旋转方向为ROTATION_0时,取int;
当前屏幕旋转方向为ROTATION_90时,取int;
当前屏幕旋转方向为ROTATION_270时,取int;
当前屏幕旋转方向为ROTATION_180时,取int;
其中,threshold中的每一个元素由两个值构成,用来表示一个范围。
WindowOrientationListener会注册一个Accelerator类型的SensorEventListener,当有新的SensorEvent产生时,调用filterOrientation产生一个int orientation值。这个值会在threshold的各个元素表示的范围中匹配,看会落在哪个范围。假设当前屏幕方向为ROTATION_0,那么threshold={{60, 165}, {165, 195}, {195, 300}},假设这个时候把屏幕左侧翻起90度。filterOrientation计算出的orientation值落在了第三个元素范围内,那么去ROTATE_TO_WITH_180中寻找与它对应的值,发现是ROTATION_270,那么就把当前屏幕旋转方向改变为270度。threshold的取值就变成了THRESHOLDS_WITH_180。当把屏幕再次放平时,filterOrientation计算出的orientation值会落在第一个元素表示的范围内。去ROTATE_TO_WITH_180中寻找与它对应的值,发现是ROTATION_0,那么当前屏幕旋转方向被改变为0度。
还有一个变量比较重要,mAllow180Rotation,这个变量设置为false时,就不使用THRESHOLDS_WITH_180和ROTATE_TO_WITH_180这一对数组来做上面这些变的了,就使用THRESHOLDS和ROTATE_TO。
其实,我研究了半天也没有搞清filterOrientation的算法以及THRESHOLDS_WITH_180和THRESHOLDS这两个数组里面的每个数字代表的具体意义。最后只搞清了上面的这个流程,还有ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_180这四个角度分别代表哪四个方向。但这足以应付我们要做的事情了。
比如,我想让屏幕最多只旋转90度和180度,不让它有旋转270度的机会。那就把ROTATE_TO_WITH_180里面的ROTATION_270全部变成90度。这样,应该旋转到270度时,就会旋转到90度了。如果不想让屏幕旋转,把所有值都改成ROTATION_0就可以了。
再深入挖掘一下这个话题
PhonwWindowManager是唯一实现WindowOrientationListener接口的类,它管理着整个设备界面的显示。当PhonwWindowManager通过WindowOrientationListener知道屏幕方向发生旋转时,会告诉WindowManagerService:
mWindowManager.setRotation(rotation, false, mFancyRotationAnimation);
而WindowManagerService得到这个通知后,会做两个比较重要的事情:
1、Su***ce.setOrientation(0, rotation, animFlags);
2、mRotationWatchers.get(i).onRotationChanged(rotation);
我们知道,每个Activity都有一个View树,每个View树都是绘画在一个Su***ce上面的。通过上面这两步,先把Su***ce给旋转了,再告诉Activity重新绘制View树,就完了整个屏幕的旋转。
安卓强制360度旋转桌面
可以下载app强制360度旋转桌面。
这个APP的名字叫做“UltimateRotationControl”,也就是终极屏幕控制的意思。开启APP后,即可看到开启服务的开关,按照提示开启即可。
开启了相应的权限后,即可看到APP的各种功能。在主界面中个,能够找到使用何种旋转方案(强制自动、锁定当前、强制纵向/横向等等),选择所需要的方案就可。
更多文章:
listview实现点击事件(如何给listview 某个item设置点击事件)
2026年4月15日 18:00
element ui下拉框(element中select下拉框中value-key使用)
2026年4月15日 17:40
数据库系统概论答案第五版第六章(数据库系统概论这门课程第六章关系数据理论的知识点有哪些)
2026年4月15日 17:20
对象赋值和浅拷贝的区别(Python3 & 浅拷贝与深拷贝)
2026年4月15日 17:00
perl脚本的运行环境(PERL运行“Can’t locate Win32/OLE.pm in INC”怎么解决)
2026年4月15日 16:40
字符串型怎么转化为数字类型(在EXCEL中有什么函数可以把字符型转成数字型)
2026年4月15日 15:40
数据类型single与float(Vb中有浮点型数据没有,我只看到单精度和双精度的.)
2026年4月15日 15:20
fontcreator字形编辑(怎么用fontcreator做字体)
2026年4月15日 15:00




