求助,触屏控制手机屏旋转怎么设置的问题

Android实现屏幕旋转方法总结
转载 &更新时间:日 14:59:32 & 作者:Trent
这篇文章主要介绍了Android实现屏幕旋转方法,实例总结了屏幕旋转的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例总结了Android实现屏幕旋转方法。分享给大家供大家参考。具体如下:
在介绍之前,我们需要先了解默认情况下android屏幕旋转的机制:
默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-& onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间。如果是在横竖屏UI设计方面,那么想很好地支持屏幕旋转,则建议在res中建立layout-land和layout-port两个文件夹,把横屏和竖屏的布局文件分别放入对应的layout文件夹中。
了解了这些以后,我们对android的屏幕旋转方法进行如下总结:
1. AndroidManifest.xml设置
如果单单想设置横屏或者竖屏,那么只需要添加横竖屏代码:
android:screenOrientation="landscape"横屏设置;
android:screenOrientation="portrait"竖屏设置;
这种方法的优点:即使屏幕旋转,Activity也不会重新onCreate。
缺点:屏幕只有一个方向。
2. 代码动态设置
如果你需要动态改变横竖屏设置,那么,只需要在代码中调用setRequestedOrientation()函数:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//横屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//竖屏设置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
//默认设置
这种方法优点:可以随意动态设置,满足我们人为改变横竖屏的要求,同时满足横竖屏UI不同的设计需求;
缺点:如果改变设置,那么,Activity会被销毁,重新构建,即重新onCreate;
3. 重写onConfigurationChanged
如果你不希望旋转屏幕的时候Activity被不断的onCreate(这种情况往往会造成屏幕切换时的卡顿),那么,可以使用此方法:
首先,在AndroidMainfest.xml中添加configChanges:
&activity android:name=".Test"
android:configChanges="orientation|keyboard"&
&/activity&
注意,keyboardHidden表示键盘辅助功能隐藏,如果你的开发API等级等于或高于13,还需要设置screenSize,因为screenSize会在屏幕旋转时改变;
android:configChanges="keyboardHidden|orientation|screenSize"
然后,在Activity中重写onConfigurationChanged方法,这个方法将会在屏幕旋转变化时,进行监听处理:
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stubsuper.onConfigurationChanged(newConfig);
if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
// Nothing need to be done here
// Nothing need to be done here
这个方法的优点:我们可以随时监听屏幕旋转变化,并对应做出相应的操作;
缺点:它只能一次旋转90度,如果一下子旋转180度,onConfigurationChanged函数不会被调用。
4. 结合OrientationEventListener,自定义旋转监听设置
如果你想更加完美,更加完全的掌控监听屏幕旋转变化,比如,转屏时不想重新onCreate,尤其是在Camera界面,不想出现旋转preview时屏幕的卡顿、黑屏等问题,那么,可以尝试:
首先,创建OrientationEventListener对象:
private OrientationEventListener mOrientationL
// screen orientation listener
private boolean mScreenProtrait =
private boolean mCurrentOrient =
然后,自定义屏幕变化回调接口
abstract protected void OrientationChanged(int orientation);
//screen orientation change event
最后,自定义监听类
private final void startOrientationChangeListener() {
mOrientationListener = new OrientationEventListener(this) {
public void onOrientationChanged(int rotation) {
if (((rotation &= 0) && (rotation &= 45)) || (rotation &= 315)||((rotation&=135)&&(rotation&=225))) {//portrait
mCurrentOrient =
if(mCurrentOrient!=mScreenProtrait)
mScreenProtrait = mCurrentO
OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Log.d(TAG, "Screen orientation changed from Landscape to Portrait!");
else if (((rotation & 45) && (rotation & 135))||((rotation&225)&&(rotation&315))) {//landscape
mCurrentOrient =
if(mCurrentOrient!=mScreenProtrait)
mScreenProtrait = mCurrentO
OrientationChanged(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.d(TAG, "Screen orientation changed from Portrait to Landscape!");
mOrientationListener.enable();
在onCreate()中调用:
startOrientationChangeListener();
这个方法的优点:你可以任意随时准确的监听屏幕旋转变化的状态,可以随时动态改变横竖屏状态;
注:对于Camera来说,你可以设置初始化为横屏或者竖屏,然后对外提供旋转监听,这样,既可以获得屏幕旋转状态,让你做出相应的操作,又不会出现重新onCreate当前Activity造成的卡顿与短暂的黑屏切换。
希望本文所述对大家的Android程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八)
Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放(八)
围观78881次
编辑日期: 字体:
前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放。
大家想一想模型的旋转,实际上是镜头的旋转。模型的缩放实际上是镜头Z轴方向的坐标。那么实现本章的内容只需要控制镜头的位置方可实现。
我们在游戏场景中创建一些简单的模型做为参照物,插一句 “大家有谁知道 . FBX 的模型那里可以免费找到,我想在博文中加点游戏模型让场景更好看一些,可是苦于找不到有点郁闷,用公司的模型来写博文有觉得有点不合适”哇咔咔 ,如果有知道的哥们 不妨告诉我喔。啦啦啦。
我们创建一个简单的游戏平面, 然后平面中放一个箱子做为旋转缩放的参照物。如下图所示,选中摄像机,给摄像机添加一个脚本名称为Move. 脚本中有一个参数 Target,它的作用是设置摄像头旋转移动参照物,这里把一个箱子赋值给了 Target,那么左右滑动屏幕会发现箱子在旋转,两手缩放屏幕会发现箱子在放大与缩小。
我们看看Move这条脚本,说明一下几个重要的 :
这些方法都是系统自己调用的方法
function Start () : 游戏启动以后只调用一次,可用于脚本的初始化操作,
function Update ():Start()方法调用结束以后每一帧都会调用,可以在这里更新游戏逻辑。
function LateUpdate (): Start()方法调用结束以后每一帧都会调用,但是它是在 Update()调用完后调用。
Move.js完整代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
//用于绑定参照物对象var target : Transform;//缩放系数var distance = 10.0;//左右滑动移动速度var xSpeed = 250.0;var ySpeed = 120.0;//缩放限制系数var yMinLimit = -20;var yMaxLimit = 80;//摄像头的位置var x = 0.0;var y = 0.0;//记录上一次手机触摸位置判断用户是在左放大还是缩小手势private var oldPosition1 : Vector2;private var oldPosition2 : Vector2;&//初始化游戏信息设置function Start () {&&&&var angles = transform.eulerAngles;&&&&x = angles.y;&&&&y = angles.x;& // Make the rigid body not change rotation&&
if (rigidbody)
rigidbody.freezeRotation = true;}&function Update (){ //判断触摸数量为单点触摸 if(Input.touchCount == 1) {
//触摸类型为移动触摸
if(Input.GetTouch(0).phase==TouchPhase.Moved)
&&&&//根据触摸点计算X与Y位置
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;&&&&&&&& y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;&
} }& //判断触摸数量为多点触摸 if(Input.touchCount &1 )&&&&{&&&& //前两只手指触摸类型都为移动触摸&&&& if(Input.GetTouch(0).phase==TouchPhase.Moved??Input.GetTouch(1).phase==TouchPhase.Moved)&&&& {&&&&
&&&&//计算出当前两点触摸点的位置
var tempPosition1 = Input.GetTouch(0).position;
var tempPosition2 = Input.GetTouch(1).position;&&&&&&&&&&&& //函数返回真为放大,返回假为缩小&&&&&&&&&&&& if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))&&&&&&&&&&&& {&&&&&&&&&&&&
//放大系数超过3以后不允许继续放大&&&&&&&&&&&&
//这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改&&&&&&&&&&&&&&
if(distance & 3)&&&&&&&&&&&&&&
{&&&&&&&&&&&&&&
distance -= 0.5;&&&&&&&&&&&&&&
}&&&&&&&&&&
{&&&&&&&&&&&&&&&& //缩小洗漱返回18.5后不允许继续缩小&&&&&&&&&&&&&&&& //这里的数据是根据我项目中的模型而调节的,大家可以自己任意修改&&&&&&&&&&&&&&&& if(distance & 18.5)&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&
distance += 0.5;&&&&&&&&&&&&&&&& }&&&&&&&&&&&& }&&&&&&&&&&&&//备份上一次触摸点的位置,用于对比&&&&&&&& oldPosition1=tempPosition1;
oldPosition2=tempPosition2;&&&& }&&&&}}&//函数返回真为放大,返回假为缩小function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean{ //函数传入上一次触摸两点的位置与本次触摸两点的位置计算出用户的手势&&&&var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));&&&&var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));&&&&if(leng1&leng2)&&&&{&&&&
//放大手势&&&&&&&& return true;&&&&}else&&&&{&&&& //缩小手势&&&&&&&&return false;&&&&}}&//Update方法一旦调用结束以后进入这里算出重置摄像机的位置function LateUpdate () {&&&&&//target为我们绑定的箱子变量,缩放旋转的参照物&&&&if (target) {
&&&&& //重置摄像机的位置
y = ClampAngle(y, yMinLimit, yMaxLimit);&&&&&&&&var rotation = Quaternion.Euler(y, x, 0);&&&&&&&&var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;&&&&&&&&&transform.rotation = rotation;&&&&&&&&transform.position = position;&&&&}}&static function ClampAngle (angle : float, min : float, max : float) { if (angle & -360)
angle += 360; if (angle & 360)
angle -= 360; return Mathf.Clamp (angle, min, max);}
在Untiy3D 中运行用鼠标手势点击上看不到任何效果的,必需在iPhone真机上才可以触摸感应到效果喔 . 嘻嘻~
OK 接下来将Unity3D 导出成Xcode项目,导出的方法有谁还不会??? 我的第一篇文章有说明噢。哇咔咔~~ 然后运行项目只能在真机上运行哦。。 看看我在iPhone 上的截图。
触摸iPhone屏幕镜头旋转与缩放以后的效果,这个图确实有点不太好截,我一会把项目的源代码工程下载地址贴上来,方便大家阅读与学习,哇咔咔~~
镜头任意的旋转与缩放,还不错噢,大家快点来学习Unity3D游戏开发吧,哇咔咔~~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~ 附上工程的下载地址,文件名称是zoom.unitypackage,下载完毕的盆友们双击就可以自动在Unity3D 下打开它啦。然后导出成iPhone项目就可以运行了。
今天回家装个windows 7 最近对wp7的游戏开发有点兴趣哦~ 哦也~回家钻研一下~哇咔咔
下载地址:
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:
Pingback 引用通告:
Pingback 引用通告:触摸屏幕还是转动旋钮?Apple Watch游戏的六种可能
正如你知道的那样,苹果公司在今天凌晨发布了两款“岂止于大”的新手机,以及一块充满时尚感的新玩意,Apple Watch。一位朋友对我说,与其他智能手表相比,Apple Watch首先是一块表,而其后才是一款智能设备。用户可以将其作为一样时尚饰物佩戴出去,通过各种表带和款式的搭配突破以往科技产品单调呆板的形象,而同时却又能通过各种生活助理的功能给人以科技的关怀。对此,我深以为然。
但实际证明,与“个人生活助理”这样颇有“放置Play”意味的定位相比,人们更喜欢“科技玩物”。一款设备,只有动手玩起来,才能够给人以最大的满足感。而在这方面,不仅仅是Apple Watch,所有的智能可穿戴设备都有着缺憾。小巧的体积注定续航短暂,而玲珑的屏幕意味着在移动端与主机端的游戏制作经验将不再适用。通过对于Apple Watch特性的分析,我们可以大胆预测,当Apple Watch到来之时,以下几种游戏类型或许最有可能成为现实。
■ 触摸屏幕:疯狂的点击
如果说Apple Watch能有什么特质在第一时间抓住人们的眼球,那一定是它的屏幕。虽然不像传闻中那样,有着大弧度的曲面屏,但是它的蓝宝石表镜与良好的色彩表现仍然吸引着人们去亲手触摸,看一看它与那些具有大屏幕的移动设备有着怎样的不同。这也正是Apple Watch游戏设计的第一种可能:通过点击来带来乐趣。
单纯的点击无异于苦力,但是在某些情况下人们却乐此不疲。便是利用了这种理念设计出的。在这款游戏中,玩家能做的就是去点击那块大大的饼干,并且通过赚得的饼干去继续解锁一些道具,它们可以帮助你更快更自动化的获得更多饼干。通过饼干赚更多饼干,这看似无聊透顶,但是它意外地在网络上具有众多拥趸,有人甚至编写了脚本,为了饼干而昼夜不停地生产。这样的情况在一款没有任何社交激励的游戏中尤为罕见,但很显然,它利用的是我们人性中某种对于成就感的追求欲。或者它也可以从侧面说明,现代人究竟有多无聊。
与此理念相同的游戏还有iOS上的《愚公移山》。另外《迪斯科动物园》(Disco Zoo)中利用动物赚钱的机制也与此有几分类似,但这些游戏都只能在移动设备上玩到。相对于移动设备,可穿戴设备更加随身,可以充分利用所有的碎片时间。假如有一天,当这种类型游戏登陆Apple Watch,或许我们会看到身边出现大批“狂点党”。
■ 手指轻划:困惑的浪漫
在此次推出的Apple Watch上,苹果部署了一项名为“Digital Touch ”的功能。用户可以将简单的绘画发送到好友或者爱人的Apple Watch上,用来传递感情,表现关怀。
这样的功能让我想到了之前流行过的《你画我猜》。在《你画我猜》中,用户之间通过互猜所绘制的内容来进行较量,而通过Apple Watch,这种游戏进行的过程将更为简单。当一名用户绘制图案之后,另一名用户随即便可收到提醒。即便该用户暂时无法查看,也可以通过智能旋钮点击等方式来告知对方稍等片刻。当智能可穿戴设备成为我们身体的一部分,彼此之间的互联将更加轻松。
不过这样的游戏同样存在隐患。如何规避陌生人的骚扰,又如何在希望安静的时候不被打扰,这些问题都有待今后解决。
■ 掰手腕:男人间的较量
在智能设备出现之前,我们获取快乐的方式比较简单,而掰手腕就是其中之一。当智能移动应用大潮来临,人们在扩展设备功能的同时,这项古老的游戏也得到了重新发掘。在iOS上,有许多掰手腕的辅助应用,《腕力对决》(iArm Wrestle Champ)就是其中之一。这款应用多被用在聚会场合,当玩家设定好自己的头像和规则之后,双方把手机握在手中,然后便可以开始角力了。应用可以计算出两人相持的时间,场面的优势比以及最终的获胜方等信息。同时还可以拍下在较量之中的两人的图像。
但这样的应用新颖有余而实用不足,一方面手机握在手中时手感肯定很糟糕,另一方面在两个壮汉的挟持下手机本身很容易损坏。但如果这款应用能够登陆Apple Watch,或许它能够获得更多的青睐。不过当其中一方的手腕重重地摔在桌上时,蓝宝石玻璃能够承受多大的冲击也是个问题。
■ 雅达利旋钮:复古的感受
上图你所看到的东西并不是某种电器的开关,而是一种古老的游戏控制器:雅达利旋钮(Atari Paddle )。这种设备首次被应用是在雅达利公司于1972年推出的游戏《乒乓》中,玩家通过旋钮控制乒乓横板的移动。而在后来,厂商还为这种设备添加了射击按键,使它能够应用于一些更复杂的游戏中,比如乔布斯早年设计的游戏,《突围》(Break Out)。
在Apple Watch上,屏幕侧边的旋钮具有重要的作用,用户可以使用它来缩放屏幕,或者选择菜单。而如果能够利用它来进行游戏控制,玩家或许可以在Apple Watch上重温过去的游戏感受。当然,设备本身能否承受住这种频繁的操作仍然值得商榷。
■ 最后但最重要:社交与运动
《Ingress》中错综复杂的地图
如果你觉得以上这些点子都太过古灵精怪,那么下面的两项则是中规中矩的答案:利用NFC近场通讯功能实现的增强现实社交性游戏,以及通过重力感应来实现的运动游戏体验。
Apple Watch中加入了NFC芯片,用户用其可以完成Apple Pay等支付功能。但是如果结合卫星定位以及运动监控功能,则可以实现更加有趣的地图探索社交游戏。在这方面,谷歌开发的Google增强现实游戏《Ingress》是一个很好的先例。
玩家通过《Ingress》可以实现真实世界中的虚拟战场相互攻防,游戏会通过GPS来确定玩家的方位,使玩家在地图上找到指定的目标和对手。这使得玩家能够体验到与以往屏幕游戏大不相同的新鲜体验,而可穿戴设备的加入更加深了这种体验的浸入感。相信如果苹果方面在Apple Watch上推出这样的游戏,一定会引起一阵购买热潮。
另一方面,由于Apple Watch中具有重力感应功能,玩家也可以将其作为iPhone设备的控制器使用,利用体感完成一些通过重力感应或是触摸控制无法实现的复杂操作。这将会增强iOS上的游戏体验。
■ 开发商:创新真的重要吗?
将移动设备上的游戏原封不动的移植到可穿戴设备上无疑是一个糟糕的主意
虽然上面预测了6种在Apple Watch上进行游戏的方式,但决定权从来就不在玩家手中。就像移动游戏市场目前的现状一样,虽然理论上来说有着无穷的可能性,同时也不断有先行者去尝试新的游戏类型,但是对于大部分厂商来说,沿袭一个经典的模式仍然是最稳妥的方式。开发商决定了一切。
Apple Watch让人们再度将目光投向了智能可穿戴设备市场,但它不像手机,可以凭借人口红利推广开来,它在未来很长一段时间内仍然是小众的玩物。有多少游戏厂商愿意来到这个市场开拓,又有多少开发商愿意去尝试那无尽可能中的一种,这些都值得怀疑。
不过,又有什么事情不是从怀疑中开始的呢。即便是iPhone,在诞生之初同样饱受争议。相信在未来,可穿戴设备将真正成为我们娱乐生活必不可少的一部分,会有人告诉我们在智能可穿戴设备上,我们该怎么玩。
字斟句酌是为了让心情充斥字里行间。
登录触乐账号
请登录后发表评论、没有账号请
使用社交账号登录
绑定手机号
根据相关规定,无法对未认证真实身份信息的用户提供跟帖评论服务,请尽快绑定手机号完成认证。
共有条评论求助!触屏控制旋转的问题【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,753贴子:
求助!触屏控制旋转的问题收藏
2D的,触屏获得X轴和Y轴的增量,想要让平面的spirit随手指在触摸屏上的移动绕z轴旋转,怎么用JavaScript写?
unity微职位高端培训,随到随学/4对1辅导/闯关式学习;unity微职位高端培训,优选大牛老师授课,实时在线答疑,保证学习效果.
求帮忙!!嘤嘤~
之前查到的都是用x轴偏移控制y轴旋转,Y轴偏移控制X轴旋转的,可是我想用z轴旋转
没人理没人理没人理没人理没人理
登录百度帐号Win8.1系统触摸屏方向不对,触摸左下角,结果是左上,整个顺时针旋转了_百度知道
Win8.1系统触摸屏方向不对,触摸左下角,结果是左上,整个顺时针旋转了
Win8.1系统触摸屏方向不对,触摸左下角,结果是左上,整个顺时针旋转了90度,系统镜像驱动都没问题,官方对应型号的镜像。校准了还是这样,求解
我有更好的答案
1、打开win8超级菜单,选择“设置”。(提示)如何打开win8超级菜单:可以用鼠标在屏幕右侧滑动呼出,或用手从屏幕外侧向内滑动。2、选择“更改电脑设置”。3、选择“轻松使用”。4、选择“其他选项”,将最下面这两个选项打开即可。即“在触摸屏幕时显示可视反馈”和“使用颜色较深、尺寸较大的视觉反馈”这两项。 5、关闭设置界面即可。(提示)如何关闭设置界面:可以将鼠标移到屏幕最上方,按住左键向最下方拖动,拖至屏幕底端松开鼠标;或者用手从屏幕上侧向下滑动,划过屏幕最底端即可。6、设置好后的效果,轻触屏幕就会有很明显的圆点出现,这下触摸操作变得清晰多了。
楼主解决了吗?
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 终极屏旋转控制 的文章

 

随机推荐