android獲取真實解析度

2021-08-31 06:25:02 字數 2513 閱讀 8339

剛才一群裡的兄弟問的一問題,稍微研究下,這裡一起分享:新建的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中,定義就ok了!

然後我們看看修改後xml後的執行截圖:

這樣就正常啦, 這裡呢我要給大家道個歉,大家也看到了,最近也沒有更新文章,主要原因是乙個回老家過年,今天剛回到公司第一天上班,第二點是由於出書的緣故,已經簽下了《清華出版社》的合同,將大概在上半年完成一本關於android 遊戲開發書籍,so~大家也體諒一下我,當然部落格我肯定是還要更新的,不過速度不會跟以前一樣快了。

ok 就寫到這裡,自己會盡快完成書籍,讓大家早點看到。

第一:

"一般來說800x480的density為240, 這樣得到的係數大小為240/160,

所以320x533再乘上1.5就是正確的畫素,這個需要結合螢幕的density來計算。

這段話說的沒錯,(公式的由來官方api 文件中有寫)android sdk 1.6 以上才可以通過canvas.getdensity(); 得到密度,canvas.setdensity(240);設定密度,但是很多群友設定過密度的都知道這根本沒有任何的效果。然後我就想通過利用比值去對canvas進行縮放處理處理畫布使其回到正確的解析度(畫素),雖然目的達到了,但是發現失真效果很嚴重。所以我認為還是用xml定義minsdkversion 的方式方便、實用。但是又出現了下乙個問題:

第二:

,加了這句話之後sdk=3時候(也就是sdk 1.5的時候),

做出來的apk不就裝不成了嗎?

沒錯,我們一旦定義了應用程式執行的最低版本,那麼低於此版本的都無法安裝此應用,但是除了利用密度比值,現在我也沒有其好的解決方案。

總結:先說一句,我們這種使用定義應用程式執行的最低版本的方式來解決,存在兩種弊端:

第一: 低於1.6sdk無法安裝程式。

第二:影響高版本的功能,例如我們的bluetooth(藍芽)是在2.0+的api中才有的。

但是可以利用密度比值,但是最好不要,畢竟失真嚴重。

如果各位童鞋有什麼的好的建議和方法可以通知我、謝謝。

Android 獲取螢幕解析度

得到乙個螢幕尺寸的三種方法如下 通過windowmanager獲取 displaymetrics dm new displaymetrics getwindowmanager getdefaultdisplay getmetrics dm 通過resources獲取 displaymetrics d...

android中獲取手機解析度

在activity中 me722 測試 480 854 豎屏 display display this.getwindowmanager getdefaultdisplay int nheight display.getheight 569 int nwidth display.getwidth 3...

Android解析度常識 多解析度適配

螢幕大小 以螢幕對角線的物理長度來衡量螢幕的大小 解析度 螢幕中所有物理畫素點數。如1920x1080,就表示寬方向有1920個畫素,高方向有1080個畫素,整個螢幕有2073600個畫素。螢幕密度 dpi dots per inch 即畫素密度,每英吋面積上存在多少個畫素。160dpi表示單位面積...