當前位置:首頁 » 圖片資訊 » android查看圖片怎麼適配
擴展閱讀
美女健身跳河視頻 2023-08-31 22:08:21
西方貴族美女照片真人 2023-08-31 22:08:15

android查看圖片怎麼適配

發布時間: 2023-01-12 17:55:34

① android中不同尺寸的圖片適配手機問題

在運行時,程序為最佳顯示效果提供了三種方法:
1.圖片縮放
基於當前屏幕的 精度,平台自動載入任何未經縮放的限定尺寸和精度的圖片。如果圖片不匹配,平台會載入默認資源並且在放大或者縮小之後可以滿足當前界面的顯示要求。例如, 當前為高精度屏幕,平台會載入高精度資源(如圖片),如果沒有,平台會將中精度資源縮放至高精度。
2.自動定義像素尺寸和位置
如果程序不支持多種精度屏幕,平台會自動 定義像素絕對位置和尺寸值等,這樣就能保證元素能和精度160的屏幕上一樣能顯示出同樣尺寸的效果。
3.兼 容更大尺寸的屏幕
當前屏幕超過程序所支持屏幕的上限時,定義supports- screens元素,這樣超出顯示的基準線時,平台在此顯示黑色的背景圖。例如,WVGA 中精度屏幕上,如程序不支持這樣的大屏幕,系統會謊 稱是一個320×480的,多餘的顯示區域會被填充成黑色。

② Android Studio 圖片適配/使用之SVG

適配可以說是Android的老大難問題了,Android廠商眾多,設備碎片化嚴重.大屏小屏,全面屏,異形屏數不勝數
以下是10分鍾內能找到的數據統計
友盟+,全域羅盤

這些還僅是佔比較多的設備,並不全面
而且同樣的屏幕尺寸也存在不同的解析度
按照友盟的粗劣統計,就算主流10種屏幕尺寸,加上每種尺寸又有不同的寬高比和解析度.
取10種尺寸,平局每種尺寸有2種寬高比,又有3種解析度
那麼就需要適配10 2 3=60種
但是實際上需要適配的主流手機設備至少也要超過100種吧(單指國內范圍)

如果你已經解決了適配的問題,那麼SVG仍然能帶給你一些方便

VG是指可伸縮矢量圖形 (Scalable Vector Graphics),它不同於傳統的點陣圖,不是通過存儲圖像中每一點的像素值來保存與使用圖形,而是通過 XML 文件來定義一個圖形,通過一些特定的語法和規則來繪制出我們所需的圖像——同樣是使用一張圖片,SVG 的方式是事先定義好怎麼去畫這個圖,然後等要用的時候再把它去畫出來,而使用傳統的點陣圖的話就是已經有了畫出來的圖,然後要用的時候直接把畫好的圖拿出來用。

創建一個xml文件在drawable中

SVG使用了 </vector> 標簽,內容的繪制使用了 <path/> 標簽.

這里可以生成兩種方式,

這里有很多很多圖案,甚至還有一些Ios的預設圖標

這樣一個看似復雜的圖片就搞定了

其實AS4.0中新創建的項目中的2個圖標也都是用SVG生成的(可能是我默認minSDK是23的原因,沒細究)
ic_launcher_background 中寫多個path標簽的方式能讓繪制內容更有閱讀性,更易後期修改維護,但是點擊標簽右邊是看不到對應哪一個位置的.盡量給每個path再加上注釋就方便日後讀寫了.

③ 安卓啟動頁使用layerlist+.9圖片適配方案,解決圖片拉伸問題。

手機冷啟動app的時候,我們會在啟動頁的主題設置一個主題

但是如果只是放一張圖片的話,會發現在高解析度的手機上會出現拉伸的情況,這時候使用layerlist配合使用:

但是當我們使用layerlist的時候,在某些手機上還是會出現圖片拉伸的情況,這個時候可以考慮將該圖片製作成.9的圖片,保持一些不該被拉伸的地方,這樣適配起來比較有用;

.9圖片(紅色的圈圈)最好在左邊的最下面和上面的最右面設置可拉伸的點,這樣不會其他地方就不會被拉伸

假如你拉伸的點在左上和上面的左面的話,如果圖片相對於屏幕分辯率過小的話,也會出現拉伸之後,導致圖片其他的地方會被擠開,導致位置不對,所以最好設置在左下和上面的最右邊,

最後啟動頁的背景一定要和啟動頁的布局的背景設置成一樣的填充模式,不然還是會給用戶一種閃一下的效果:

和layout中的

保持一致;

如果有更好的方法,多多留言,我已經是沒有別的好的方法了

④ Android 拍照獲取縮略圖以及完整圖片(適配androidN)

takePictureIntent.resolveActivity(getPackageManager()) != null
在官方文檔中有描述:startActivityForResult()方法受到調用resolveActivity()的條件的保護,該方法返回可處理該意圖的第一個活動組件,執行此檢查很重要,因為如果您使用沒有應用程序可以處理的意圖調用startActivityForResult(),則您的應用程序將崩潰。所以只要結果不為空,就可以安全的使用意圖,大概意思是檢測手機中有沒有相機。

另外一種檢測相機的方法是

required=true 表示要安裝該應用,手機必須有攝像頭該硬體。要不然不允許安裝

鴻洋的博客關於android7.0 以及 4.0 拍照封裝的處理(點擊跳轉)

類似介紹比較好的文章推薦-Android 調用系統相機拍照攻略(已適配Android N)

⑤ Android10以上拍照和選擇相冊適配以及向下兼容適配

最近一直被Android10相關的適配搞得焦頭爛額,之前也聽說過android10中的所有的視頻,音頻以及圖片等資源為了統一的管理,統一放在一個共有的文件下,也就是所謂的沙箱。看了一下其他人寫的文章,也提供了一種簡單粗暴的方式也就是在清單文件application下配置#android:requestLegacyExternalStorage="true"#,但如果android11出來又得適配了,android11是禁止除了共有文件夾下新建視頻,音頻以及圖片等文件。不然就會報找不到文件相關的錯誤,好了說到底我們還是得花點時間去適配android10以上的沙箱適配。

進入正題,接下來我們就來適配Android10相關的拍照以及選擇相冊並兼容android10以下的絕大部分的適配。

進入系統相冊的操作都是一樣的這里就不贅述:

主要的還是要對返回的data進行處理,也就是把uri轉換成文件File的路徑path

當然了拍照和點陣圖Bitmap相關的適配是一樣的。

7.0以上Android版本的路徑配置
第一步

@xml/file_camera_paths 文件配置

拍照首先需要申請拍照許可權
申請完後調用camera就可以拍照,拍照主要就是在調用相機的時需要自己去配置文件存儲路徑。

回調處理這里我就不贅述了 主要是對Android10以上關於圖片配置相關的處理
既然關於Android 10那麼我們也講一下關於定位方面的適配,Android10以上需要在清淡文件中添加一個新的定位許可權

⑥ Android屏幕適配(4)常見:第三種

前言:
Android屏幕適配(1)基礎知識篇
Android屏幕適配(2)常見:第一種
Android屏幕適配(3)常見:第二種
Android屏幕適配(5)常見:歸納總結
常見的屏幕配置問題(一些特殊的暫時除外,曲面屏,分屏模式,劉海屏),我歸檔為3種情況來分析一波
1.相同尺寸,不同解析度屏幕
2.相同解析度,不同尺寸屏幕
3.不同解析度,不同尺寸屏幕

場景:
假設我們現在市面上的手機就只有oppo,vivo以下2款手機
其他的手機廠商和oppo,vivo的其他機型的手機全都洗白了
全世界的人都只有使用用這2款手機
一個oppo,300x400,5寸的手機,賣5000000RMB
一個vivo,600x800,5寸的手機,賣10000000RMB
我現在特別土豪,為了給大家寫這篇帖子
我2個手機都買了
Android屏幕適配(2)常見:第一種
...
100年後,又有一個小米手機廠商出來了,發布了一款300x400,10寸的手機,10000000RMB
假設下圖中裡面的就是5000000RMB的oppo,外面的就是10000000RMB的小米
Android屏幕適配(3)常見:第二種

這時候我們
相同尺寸,不同解析度屏幕
相同解析度,不同尺寸屏幕
都解決了,然而這又有什麼卵用?
告訴用戶我們的APP只支持300x400解析度的手機使用?
還是告訴用戶我們的APP只支持5寸屏幕的手機使用?

第三種情況:不同解析度,不同尺寸屏幕(任意手機)
只也是我們的終極目的,前面2篇適配只是做一個鋪墊,讓這里講解的時候提到的東西更容易被理解
如果這里分析的還有未分析到的地方歡迎大家提出,一定及時修正

咱們還是先來個特殊的試試水,把300x400,5寸的同時放大2倍600x800,10寸
按慣性思維,這里同時放大2倍,肯定一張圖片會自己也放大2倍,然後就適配了啊

使用PX

改用DP

GG了!三板斧劈完了!還是未能解決適配問題!!!
理性分析走一波:
1.PX不行的原因:(參考 Android屏幕適配(2)常見:第一種 )
PX是像素點單位,就是解析度單位,不論屏幕尺寸怎麼變只要解析度沒變,它所佔的屏幕寬比都是一樣的
也就是說當我們在使用PX的情況下,市面上的手機只要跟我們開發時候的解析度是一樣的都能適配
寬佔比=圖片寬PX/屏幕解析度寬
解析度改變
被除數不變,除數變,結果變=圖片寬PX不變,屏幕解析度寬變,結果變
所以這里的不同解析度,不同尺寸屏幕情況是不滿足解析度相同原則的
所以這里的PX是不行的.

2.DP不行的原因:(參考 Android屏幕適配(3)常見:第三種 )
注:一下解釋需要一些基礎知識,建議先看 Android屏幕適配(1)基礎知識篇 再往下看
無論我們開發中用什麼虛擬單位(系統幫我們做了一次適配的單位),怎麼個適配,最後顯示在我們屏幕上都是以PX為單位的(構成圖像的最小單位)
其實DP這個虛擬單位,最終顯示的時候就是獲取屏幕信息,再根據自身的演算法規則,幫我們算出來的PX做為單位顯示到屏幕上,但是它的演算法已經是我們Android固定好了的(演算法:規定以160dpi為基準,1dp=1dip=1px)
好,有了以上了解我們再回頭來分析一下當前場景下的DP怎麼就不行了

以上就是通過DP的固定演算法換算PX的過程(PX=DP Desity=DP (DPI/160))
1.根據公式發現在同一DP寬度情況下改變PX值的唯一變數就是DPI了
2.結合以上計算過程,發現DPI都是100DPI,所以換算出來的PX肯定是相同的,也就是上圖中的93.75PX
3.PX都相同了,那就又回到上面的PX不行的原因了!
所以這里的DP是不行的.

理性分析一波完不行的原因後,總該有點啟發,或者思考方向吧!
整理歸納一下再看看有點啟發沒有--> 走起(我這里只知道PX跟DP,其他的一概不知道):
1.最終都是以PX顯示到屏幕上
2.Android有一套適配置演算法:DP,但是不能全部適配各種情況
3.我如果在開發的時候使用PX呢.結果如何? 那肯定就是死敲敲了.已經寫死了,再也無法適配了.果斷舍棄
4.有一點肯定的認知,在開發的時候我不能用死單位,還是需要使用虛擬單位,再生成PX的時候能生成我心中想要的PX就好了
5.那我到底需要在什麼情況下生成多少PX呢?我也不知道,還是先把這個搞明白了來

就上面這種情況.我想達到的效果是怎麼樣的?
5.1占屏寬比在2個屏幕上都要是一樣的,也就是說在300x400,5寸上75PX圖片需要在600x800,10寸上是75PX,占屏寬比都要達到25%,見下圖

對的,這就是我心中的藍圖了!
再回到上面DP不能適配的情況看看

這里的600x800,10寸上也就是說,占屏寬比也能達到:31.25%,跟300x400,5寸上一樣就行了
此時的占屏寬比:31.25%就是圖片PX要達到187.5PX

我:開發者
你:屏幕
這種情況下.我想做屏幕適配,其實就是我要來巴結你的節奏啊!

你說:我告訴你啊.開發者,在我這里其他的我都不認識,我只認識PX.你拿一個187.5PX的圖片來.我立馬適配,其他的都不用談了!

我說:大哥你看能不能通融通融.我實在是搞不定了,你給我把93.75PX轉成187.5PX把,立馬遞上一根自己都捨不得抽的,原產巴西的大雪茄!

你說:不是我不想.我是做不到.我只負責顯示PX.其他的撒都不清楚,給你指條名路.你去求我們領導Android系統

Android系統說:我給屏幕小弟顯示的PX演算法都是固定死了的PX=圖片寬DP Desity, Desity=DPI 160,不會為你一個人開後門.大家都在這個基礎上做開發.眾生平等!...... 雖然演算法是固定死了的.但是我不是要提供限定符(SW)給你們嗎?就是為了解決你們開發者的這個問題而存在的

我說:好的.我去看看, 限定符(SW)(Android屏幕適配(1)基礎知識篇 )

結合SW限定符計算得到:
300x400,5寸屏 的限定符SW=300PX/Desity=300PX/0.625=480
600x800,10寸屏 的限定符SW=600PX/Desity=600PX/0.625=960
所以就是SW480和SW960

下面使用Android官方給我們提供的插件ScreenMatch(具體使用詳情網路一大堆.查一下就明白了)自動給我們生成SWXXX文件

最後:
有什麼理解不到位地方歡迎指正,以上理解均來源與對一些基礎知識概念的理解,未實操證實過!
這種適配基本能解決大多數問題.還有一些小部分的就要特殊處理了,除了這種適配.還有其他的,以後再補上

建議ScreenMatch還是用base_dp=360,這個值基本兼容大部分屏幕.具體可以拿幾個現目前市面上的手機真是解析度跟屏幕尺寸算一算.我這里的例子只是舉的特殊了.像SW960這種基本都不存在的.再說說之前留下的問題
提問 : 你這個例子舉得太特殊了如果是300x400,5寸跟500x800,5寸佔比就不同了
答:自己算一下SW是多少.生成一個對應的SW就行了,其他的任意機型同理

⑦ Android 啟動圖適配

3.15更新 ,項目上線後,在華為某些機型上出現了崩潰的情況

原因是高解析度的圖片放置到了低dpi的drawable文件夾中的,對應就是我們的drawable-long文件夾,但為什麼其他機型不會出問題呢?我摸索了一下,發現這台華為機型被用戶調節了顯示設置

這里顯示大小調大了,相當於把屏幕的dpi調小了,從而載入drawable-long中的圖片時會把圖片放大,導致bitmap too large的問題。

一般別的機型只能調節字體大小,但無奈華為市場份額較高,肯定要兼容,所以這種方案不能用了。

我的解決方法是用回9.png的方案,之前測試不成功是因為自己製作9.png圖的時候底部和右邊的線畫錯了,導致顯示區域出現問題,重新製作就好了。

原文

眾所周知,安卓不同機型的屏幕尺寸千差萬別,百花齊放,但在很長一段時間里,安卓手機屏幕的長寬比大致都在16:9上下浮動。所以我們之前做APP啟動圖的時候,設計往往只會出一張16:9的圖給我們,在不同機型上不會有太明顯的拉伸效果。

直到出現了全面屏的機型,特別是屏幕比例在2:1以上的機型,如果還是用一張16:9的圖去顯示,那麼拉伸效果是很明顯的,我以微信的啟動圖為例子,在1440*2960的Pixel 3XL機型上,用16:9的啟動圖是這樣的效果(地球都變成橢圓了)

這種情況一般有幾種解決辦法

1、把啟動圖製作成9.png圖,9.png是我們安卓開發的老朋友了,一般這種圖片拉伸問題都可以用9.png來解決, 但啟動圖有點特殊,顯示完啟動圖後常常會顯示開屏廣告,如果開屏頁面的布局和廣告邏輯比較復雜(像我司項目的開屏,既有半屏廣告又有全屏廣告,還有gif、視頻廣告等),在原有布局不改動的情況下,用了9.png會導致各種奇怪的問題

2、把開屏圖製作成layer-list的drawable文件,底層layer設置成純色(如純白純黑,根據開屏圖顏色而定),上層放置關鍵元素(如項目logo),這種方式適合開屏圖比較簡單,而且開屏圖背景可以和底層顏色融合的情況

3、製作多種尺寸的開屏圖,分別放到不同的drawable文件夾下,考慮到資源打包的大小和UI的工作量,我們分別准備16:9和2:1的開屏圖也夠用了,然後問題在於,我們應該把16:9和2:1的圖分別放到哪個文件夾下?我在模擬器選取了覆蓋主流屏幕的機型

16:9的啟動圖我們根據圖片實際解析度放置在drawable-xhdpi或者drawable-xxhdpi文件夾是比較合適的,那麼2:1的應該放在哪裡呢? 查閱官方文檔,發現有這樣的限定符

即drawable-long和drawable-notlong,分別對應寬屏和非寬屏,但是這個限定符是API 4中增加的,描述中的WQVGA、WVGA、FWVGA在現今主流手機中也不存在了,本著試一試也不會虧的精神,我嘗試在工程中增加了drawable-long文件夾,並把2:1的啟動圖放進去,運行,奇跡出現了,Pixel 3和Pixel 3 XL這種全面屏的手機居然可以取到這個文件夾里的圖片,而Nexus 4、Nexus5、Nexus6等接近16:9的手機仍然是取drawable-xhdpi或者drawable-xxhdpi的文件夾,這就解決了全面屏手機啟動圖拉伸的問題。看起來,雖然drawable-long的文檔描述有點舊,但谷歌應該是有不斷更新它的適配邏輯的,我測試用的模擬器全部都基於Android5.1,而用我自己的Android 10真機測試也是沒有問題,大致得出結論這個方案是可行的

⑧ Android 適配一篇就夠 - 編譯版本supportAPI 兼容圖片適配

本文介紹 Android 不同系統及圖片資源的常見適配問題。

基本原則:先查找和屏幕密度最匹配的目錄,如果沒有,則依次向高密度目錄查找,如果查到最高也沒有,則查找 drawable-nodpi 目錄(該目錄無論設備密度如何,系統都不會縮放此目錄中的資源),如果還是沒有,再依次像低密度目錄查找;

我們以具體的實例分析該問題。實例:一個本該放在 hdpi(對應設備 dpi:240) 的圖片,被放在了 xxhdpi(對應設備 dpi:480) 目錄,圖片還是在 dpi 為 240 的設備上顯示時,大小是放大還是縮小?放大或縮小幾倍?內存佔用是增大還是減小?增大或者減小幾倍?

首先要了解圖片內存佔用計算公式: 內存大小 = 解析度 x 每個像素點大小 ,其中解析度是圖片載入到內存後像素點的總個數(寬度 x 高度),每個像素的大小取決於使用的數據格式,如 ARGB_8888 格式就會佔用 4 個位元組。這里特別說明了,解析度是圖片載入到內存後的像素點個數,並不是載入前的像素數,二者關系為:載入後寬度/高度 = 載入前寬度/高度 x (設備 dpi / 圖片所在 drawable 的dpi)。因此答案也就一目瞭然了,新的寬高都減少了1/2,因此 總內存大小減小了1/4

⑨ Android切圖適配知識點匯總

對於在工作中沒有接觸過安卓版本app,或是面試的時候會被問到安卓解析度等問題,可以通過本文對安卓切圖有所了解。我在以往的工作中也沒有接觸過安卓設計等一系列問題,但是看完一些文章後,大致對安卓解析度等知識點有所了解。此文是對自己所了解到的知識做一個總結,也希望能幫助到不了解安卓一系列問題的同行們,好啦,馬上進入正題!

基本概念
1、手機屏幕尺寸計算方式:對角線尺寸/2.54(1英寸=2.54厘米)
2、解析度:屏幕上顯示的像素個數,單位尺寸內像素點越多,顯示的圖像就越清楚。

上圖中紅框框出來的是現在市場上主流的解析度,只要記這三個就可以。其他的已被淘汰。

3、屏幕密度:屏幕每英寸有多少個像素。
4、單位:dp是開發中用於描述尺寸和間距。
sp是用於描述字型大小和行距。

用哪種解析度來設計?
原則上需要為不同的解析度去單獨設計效果圖,但由於實際情況,只需要採用一種解析度去設計,目前多數採用720*1280的解析度。

需要提供幾套切圖?
只需要一套切圖即可
720*1280尺寸的切圖可以適配其他機型,有些特殊的切圖需要單獨適配的,比如icon等。
適配480 800的機型,只需要把切圖/1.5即可。
適配1080
1920的機型,只需要把切圖*1.5即可。適配此解析度的時候,需要在720 1280下畫圖的時候,盡量採用矢量圖形來畫圖。
例如,圖標是48
48的時候,適配1080 1920點時候,48px*1.5=72px.把矢量圖形調整為72px即可。開發會把切圖放到xxhdpi的文件目錄下,就會自動適配1080 1920
同樣,適配480 800的時候,48px/1.5=32px.開發把切圖放到hdpi文件目錄中,會自動適配。
720
1280的切圖,開發放到xhdpi的目錄下。
註:設計圖片的時候盡量採用偶數。

需要提供幾套標注?
在720*1280解析度下進行設計,此解析度下1dp=2px.
可以直接使用dp標注尺寸,sp標注文字大小

註:使用dp標注尺寸。使用sp標注文字大小

該使用什麼字體及字型大小?
中文字體:思源
英文字體:Android 4.x及以上採用Roboto,Android 2.x和3.x採用Droid Sans.
字型大小:12sp、14sp、18sp、22sp(也可根據實際情況調整)

目前掌握以上知識點,可能多少也有些小問題,歡迎有經驗的大神指正、指導。謝謝啦~