日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
巧用Android圖片資源,打造更精致的APP

前言

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、休寧縣網(wǎng)絡(luò)推廣、成都微信小程序、休寧縣網(wǎng)絡(luò)營銷、休寧縣企業(yè)策劃、休寧縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供休寧縣建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

由于Android系統(tǒng)的開放性,以及IOS的相對封閉。第三方設(shè)備想要使用蘋果的OS,目前來說是不可能。所以,各廠商紛紛的投入了android的懷抱,

android陣營也越來越強大,如今移動操作系統(tǒng)也就是android和ios的天下。也正是因為android的開放性,可定制度高,導(dǎo)致了各種屏幕尺寸、各種分辨率的android設(shè)備

鋪滿了手機、平板、智能電視、手表、盒子、智能硬件...等各種應(yīng)用場景。

作為一名有逼格的程序猿,在面對如此眾多的尺寸和分辨率設(shè)備上,想要打造一款通吃的app,勢必是要花費一番功夫的。

drawable-xxx資源文件夾

還好google已經(jīng)為我們想好了對策,為不同的分辨率提供不同的drawable資源。

先來看看微信的android客戶端,在圖片資源的使用

在res目錄下,以drawable開頭的文件夾占了一大半,后面以-hdpi、-land、-mdpi、-xhdpi...等文件夾以適配不同分辨率的機型。

可能有人會說,開發(fā)應(yīng)用只用適配hdpi或者xhdpi就可以了,同樣可以顯示出來嘛!干嘛搞這么多版本,浪費空間,還麻煩!

如果是這樣的想法,那只能說你的應(yīng)用受眾群體還沒達到一定程度,或者不追求細節(jié)的完美。對于高逼格的應(yīng)用來說,哪怕一個像素的缺失,都是不完美。

廢話了這么多,先來看卡google官方對dp的定義

Density-independent pixel (dip)

A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.

獨立像素單位(Density-independent pixel (dp)

一個虛擬的單位,用來決定UI布局的。用來表述布局的尺寸或者位置。

dp是一個與屏幕密度有關(guān)系的單位,dp與像素的換算關(guān)系為 px = dp * (dpi / 160)。例如在240密度(dpi)的屏幕上一個dp等于1.5個像素。以后我們應(yīng)該盡量使用dp單位布局,不要使用像素單位。這樣會使你的app屏幕兼容性更好

將同一張96x96像素的png圖片,分別放到hdpi、xhdpi、xxhdpi文件夾中,寬高均以wrap_content顯示

 
 
 
 
  1. ![](https://cscdn.maxleap.cn/2.0/download/NTgwZWMzNjA3ZWYyMGIwMDA3N2ViOGEx/zcf-b929ae8b-ace3-4e8d-ad2d-5cb311738b04.jpg) 
  2. 可以看到,適配較低drawable-dpi的資源圖片,顯示尺寸相對較大,但是清晰度差。而適配高dpi的圖片,顯示尺寸相對較小,但是銳度高,比較清晰!  

將像素分別為72x72、96x96、144x144像素的圖片,分別放置于hdpi xhdpi xxhdpi文件夾中,寬高以wrap_content顯示效果。

 
 
 
 
  1. ![](https://cscdn.maxleap.cn/2.0/download/NTgwZWMzNjA3ZWYyMGIwMDA3N2ViOGEx/zcf-bd311903-f4f9-4a40-baf5-0e8eaaf03e9d.jpg) 
  2. 可以看到,不同大小的圖片,放到不同的資源文件夾下,最終在屏幕上顯示的大小居然一致!但是144x144像素對應(yīng)的圖片顯示的最精致和清晰。  

到這里,應(yīng)該能看出圖片資源與drawable文件夾對應(yīng)的關(guān)系了。即使不使用高質(zhì)量的圖片,仍然可在高分辨率的屏幕上進行對應(yīng)的顯示,但是犧牲了控件顯示的精細度,屏幕dpi越高顯示越不清楚。如果一張高清晰度的照片,被放置在不恰當(dāng)?shù)膁rawable下也不能準(zhǔn)確的還原應(yīng)有的尺寸和清晰度。

對比IOS對圖片的定義,2倍圖即-xhdpi密度,3倍圖即-xxhdpi密度。

所以,想要讓應(yīng)用中的icon顯示的更加精致,那就需要對應(yīng)的配置不同像素的圖片。

使用wrap_content代替dp

很多人在處理帶圖片的icon的時候,會指定其大小,如: 

 
 
 
 
  1.           android:layout_width="45dp" 
  2.           android:layout_height="45dp" 
  3.           android:src="@drawable/icon_hdpi" />  

wrap_content可理解為包裹內(nèi)容,當(dāng)控件被設(shè)置為wrap_content將會根據(jù)實際大小進行顯示。相比直接設(shè)置dip的方式,在圖片的顯示上或多或少的會存在縮放。也就會導(dǎo)致圖標(biāo)會顯示的不夠精致。

 
 
 
 
  1.          android:layout_width="wrap_content" 
  2.          android:layout_height="wrap_content" 
  3.          android:src="@drawable/voip_camerachat_xhdpi" />  

下面以應(yīng)用中常用的tabbar,作為對比:(以1920x1080屏幕像素截圖)

圖1

圖2

圖1中的icon統(tǒng)一被設(shè)置了固定的大小24dp,同時只在drawable-xhdpi中進行圖片的適配??梢钥闯鰣D片被不同程度的拉伸,icon顯示較模糊。

圖2將icon的寬高均設(shè)置為wrap_content,同時在drawable-xxhdpi中進行了適配。圖2的icon銳度有所提高,因為wrap_content屬性的設(shè)置,本身icon圖片大小不同,導(dǎo)致icon顯示的大小不一致。所以完美的方案就是,需要UI提供尺寸均一的大圖片,適配到drawable-xxhdpi下.

相比微信的高清圖片資源,展現(xiàn)的精致效果:

SVG

Scalable Vector Graphics

在 Android 5.0(API 級別 21)及更高版本中,可定義矢量圖片,而且圖片可在不損失清晰度的情況下縮放。 只需一個資產(chǎn)文件即可創(chuàng)建一個矢量圖像,而位圖圖像則需要為每個屏幕密度提供一個資產(chǎn)文件。 如果要創(chuàng)建一個矢量圖像,在 XML 元素中定義形狀的詳情。

下列示例以定義一個矢量圖像:

在drawable文件夾下-->new-->vector Asset

可以選擇Material Icon,使用studio內(nèi)置的icon資源。這里選擇了Local SVG file,使用自己定義的svg文件。

確定保存文件的位置。svg文件會導(dǎo)出為xml文件:

生成的moon.xml內(nèi)容如下,path節(jié)點下的fillColor屬性,可以自定義顏色值。

 
 
 
 
  1.     android:width="24dp" 
  2.     android:height="24dp" 
  3.     android:viewportHeight="22.0" 
  4.     android:viewportWidth="22.0"> 
  5.     
  6.         android:fillColor="#FF000000" 
  7.         android:pathData="M16,10l0.8,-3.2L20,6l-3.2,-0.8L16,2l-0.8,3.2L12,6l3.2,0.8L16,10zM6,8c0,-2.17 0.867,-4.134 2.269,-5.575C4.634,3.581 2,6.982 2,11c0,4.971 4.029,9 9,9c4.018,0 7.419,-2.634 8.575,-6.269C18.134,15.133 16.17,16 14,16C9.582,16 6,12.418 6,8z" /> 
  8.  

layout中使用和普通圖片使用相同 

 
 
 
 
  1.          android:layout_width="40dp" 
  2.          android:layout_height="40dp" 
  3.          android:src="@drawable/moon" />  

界面顯示效果:

控件的寬高可以任意以dp的方式設(shè)置,而清晰度并未受影響。

SVG除了可以用在矢量圖片上,也可以在android上用來顯示精美的動畫效果。

有時間再對svg的生成,以及使用做更詳細的介紹。


本文題目:巧用Android圖片資源,打造更精致的APP
分享鏈接:http://www.5511xx.com/article/cdcseie.html