安卓手机分辨率游戏分辨率问题

23521人阅读
原创,转载务必在明显处注明:转载自&原文链接:&&&& 刚才一群里的兄弟问的一问题,稍微研究下,这里一起分享:新建的Emulator -配置为:WAGA800 &其分辨率是 800*480 的设备模拟器,当我们程序中在取得其 Height和 Width的时候发现,总是 320*533 ,明显是系统对我们撒了谎!如下图:&&下面是官方文档原文:&&那么为什么系统会对其分辨率进行撒谎呢? 其作用是什么呢?&简单的来说,在SDK1.6 (sdk version 4)以后,Android 增加了新功能“支持多屏”,所谓这项新功能也就是为了让我们的游戏、软件能在不同的分辨率,不同机型上一样流畅、玩美运行,其作用一来减轻我们的移植工作量,二来更好的体现Android 越来越强劲的势头。&自适应效果如下图:(WVGA高密度(左),中密度的HVGA(中),低密度和QVGA(右)&在不同的分辨率上想玩美的跑起来一款游戏和软件,有两种方式,一种是我们做游戏的时候都做成自适应屏幕的游戏方式,比如我们取坐标都根据屏幕的宽、高、图片的宽、高等等而不是写成死的位置坐标。 第二种那就是Android os 在1.6以后的这种自适应技术;&但是有些时候显然Android提供的这种自适应有时候我们不需要,或者说不太适合我们的开发,(其实这也类似于现在的游戏引擎,很多人都在问我开发游戏用什么引擎,其实公司都有自己的引擎。我自己写游戏一般不使用他人引擎(自己写引擎),因为没有一款游戏引擎适应所有的游戏类型开发,例如用RPG的引擎去做个益智连连看?是不是搞了点 - -...当然现在市面上已经有不少的游戏开发引擎,但是使用别人的游戏引擎,对于开发来说,虽然提高了开发效率,缩短了开发周期,但是对于其扩展性不得不说很是头疼的一件事情,so~建议大家去吸收这些开源引擎的知识和技术,自己整理出一份属于自己的游戏引擎,毕竟自己的扩展起来就容易多了!而不能去一谓的去使用和强加灌输别人的思维方式到自己脑中)咳咳、回到主题上来,刚才说了,有时候我们并不想使用Android os 提供的自适应,而是我们自己去写自适应,这样更加的灵活.&下面给讲解如何避开Android os的自适应的方法:&先来看下官方的一段话:&&这里是从官方文档中截取的一段,这里是在说,当Android sdk的版本是4或更低与版本为5或更高的之间的区别;那么从这里可以得知Android sdk 1.6(version 4)之前是不支持自适应的,那么解决的方法也就有了;&&我们只需要在AndroidMainFest 中,定义 &&uses-sdk android:minSdkVersion=&4& /& 就OK了!&&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&com.desmo.testAd& android:versionCode=&1& android:versionName=&1.0&&
&application android:icon=&@drawable/icon& android:label=&@string/app_name&&
&activity android:name=&.Test& android:label=&@string/app_name&&
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&/application&
&uses-sdk android:minSdkVersion=&4& /&
&/manifest& &
然后我们看看修改后xml后的运行截图:
这样就正常啦, 这里呢我要给大家道个歉,大家也看到了,最近也没有更新文章,主要原因是一个回老家过年,今天刚回到公司第一天上班,第二点是由于出书的缘故,已经签下了《清华出版社》的合同,将大概在上半年完成一本关于Android 游戏开发书籍,so~大家也体谅一下我,当然博客我肯定是还要更新的,不过速度不会跟以前一样快了。
这里还要说下,我写的这21篇文章,基本上对于学习游戏开发都是很实用很有用的,希望大家一定要细细的看,因为不少人问的都是写过的东西 - -;如果大家还有什么疑惑和问题可以来群里进行交流和互相学习。
OK 就写到这里,自己会尽快完成书籍,让大家早点看到。
_________________&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
本文补充:看到有些网友的回复,大概还存在两个问题。下面来逐一进行分析;
& & &&一般来说800X480的density为240, 这样得到的系数大小为240/160,
&& & & 所以320X533再乘上1.5就是正确的像素,这个需要结合屏幕的density来计算。
这段话说的没错,(公式的由来官方api 文档中有写)Android SDK 1.6 以上才可以通过&canvas.getDensity(); 得到密度,canvas.setDensity(240);设置密度,但是很多群友设置过密度的都知道这根本没有任何的效果。然后我就想通过利用比值去对canvas进行缩放处理处理画布使其回到正确的分辨率(像素),虽然目的达到了,但是发现失真效果很严重。所以我认为还是用xml定义minSdkVersion 的方式方便、实用。但是又出现了下一个问题:
“ & & & &&uses-sdk android:minSdkVersion=&4& /& ,加了这句话之后SDK=3时候(也就是SDK 1.5的时候),
&& & & & &做出来的APK不就装不成了吗?
没错,我们一旦定义了应用程序运行的最低版本,那么低于此版本的都无法安装此应用,但是除了利用密度比值,现在我也没有其好的解决方案。
总结:先说一句,我们这种使用定义应用程序运行的最低版本的方式来解决,存在两种弊端:
第一: 低于1.6sdk无法安装程序。
第二:影响高版本的功能,例如我们的BlueTooth(蓝牙)是在2.0+的api中才有的。
但是可以利用密度比值,但是最好不要,毕竟失真严重。
有的童鞋说利用在项目的AndroidManifest.xml中定义这些属性:
android:normalScreens=&true&
android:smallScreens=&true&
android:anyDensity=&true&&
这些是一些开关,比如是否支持小屏幕、是否支持任意密度等等,但是通过尝试发现效果不理想,甚至没效果;
可能是使用的方法不对,希望对这方面比较深入探究的童鞋可以将心得分享出来供大家讨论学习;
&& & & & & & & &&& & & &如果各位童鞋还有什么的好的建议和方法可以通知我、谢谢。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1835821次
积分:16635
积分:16635
排名:第183名
原创:147篇
评论:2789条
移动开发专家,专注于移动开发领域,多年 J2me、Android、iOS 平台游戏开发经验;
CSDN、ITeye、51CTO、eoe-Android、泰然、中国移动开发者社区、微度网等多家技术论坛担任专家与版主;
? 【iOS】(高级群/超级群)
Cocos2d-x @Himi:
? 【Lua】(高级群)
Cocos2d-x-Lua @Himi:
? 【Unity3D】(超级群)
Unity3D @Himi:
文章:62篇
阅读:857927
文章:34篇
阅读:599612unity3D android游戏屏幕分辨率问题
unity3D android游戏屏幕分辨率问题
查看次数13392 发表时间 19:36:33
android手机屏幕分辨率五花八门,导致开发时不好把握,还好各个引擎对这个屏幕分辨率问题都有较好的处理方式;unity3D 也为我们提供了一个不错的解决方案。
在Unity3D 进行 android 游戏开发时,对于不同分辨率下的显示效果就像是摄像机的自动平移了一般,看了不少游戏,对于 Unity3D 开发 android 游戏貌似都没有做相应的屏幕分辨率的处理,而是随摄像机的自动移动,把场景做大些不至于出现空白背景。
其实&Unity3D 开发3D游戏,对于不同的分辨率,我们只需要设置 1 个唯一的屏幕显示区域比(说白了就是宽高比),这样显示区域就不会随分辨率的改变而拉升。
using UnityE
using System.C
public class Resolution : MonoBehaviour {
& & public Camera mainC
& & void Start()
& & & & //Screen.SetResolution(, true, 60);
& & & & mainCamera = Camera.mainC
& & & & // &float screenAspect = 1280 / 720; &现在android手机的主流分辨。
& & & & // &mainCamera.aspect ---& &摄像机的长宽比(宽度除以高度)
& & & & mainCamera.aspect = 1.78f;
把此代码脚本绑定在 &MainCamera 上就OK了,这样就不会导致不同分辨率下屏幕显示区域大小不一的问题!
(转发请注明转自:)
&&相关推荐
&&&&&&( 19:36:33)
&&&&&&( 19:36:33)
&&&&&&( 19:36:34)
&&&&&&( 06:36:32)
&&&&&&( 06:36:32)
&&&&&&( 19:36:33)
&&&&&&( 19:36:33)
&&&&&&( 19:36:33)
&&&&&&( 19:36:32)
&&&&&&( 08:36:34)
&&发表评论
(不超过20个字符或10个汉字)
最新发布...
最新推荐...
浏览最多...
点击:122941
点击:117766
点击:101513
点击:80975
点击:57019
点击:53267
点击:52443
点击:48564
点击:44906
点击:4256847243人阅读
可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题。
手机的分辨率信息是手机的一项重要信息,很好的是,
类可以很方便的获取分辨率。下面简要介绍
类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
成员,首先初始化一个对象如下:
getWindowManager().getDefaultDisplay().getM
注:构造函数
不需要传递任何参数;调用
之后,会取得现有
方法将取得的宽高维度存放于
对象中,而取得的宽高维度是以像素为单位
,&像素&所指的是&绝对像素&而非&相对像素&。
DisplayMetrics的
toString()方法可以获取到
DisplayMetrics的大部分
fields信息,如下是在分辨率为
480x320情况下的一些输出信息:
其中,density为显示的逻辑分辨率(文档中说了很多,看得不是很明白);width及height就为屏幕分辨率(为绝对宽度与高度),与fields中的widthPixels及heightPixels一致;scaleDensity与density一致;xdpi及ydpi为准确物理像素。
下面我们来比较Android中dip, dp, px, sp之间的区别:
dip: device independent pixels(设备独立像素).
不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize,根据 google 的建议,TextView 的字号最好使用 sp 做单位,
过去,程序员通常以像素为单位设计计算机用户界面。例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16&16像素
等。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清
与分辨率无关的度量单位可以解决这一问题,Android支持下列所有单位:
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。
dip:与dp相同,多用于android/ophone示例中。
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:179867次
积分:1793
积分:1793
排名:第9191名
原创:43篇
评论:91条
(6)(13)(3)(9)(1)(15)(1)Powered by

我要回帖

更多关于 安卓pad分辨率 的文章

 

随机推荐