Android使用矢量圖代替png

2021-02-14 搜狗測試

   Android從Android5.0(API level 21)開始引入了對矢量圖的支持,兩個類:VectorDrawable、AnimatedVectorDrawable。但是其並不支持SVG這種矢量圖片格式,而是以VectorDrawable的方式來實現矢量圖的效果。

VectorDrawable是一個矢量圖,定義在一個XML文件中的點、線和曲線,和它們相關顏色的信息集合。

AnimatedVectorDrawable是矢量圖動畫,使用多個XML文件而不是針對不同解析度使用多個圖片來實現動畫。

1.VectorDrawable簡介

        VectorDrawable定義了一個靜態Drawable對象。和SVG格式非常相似,每個Vector圖形被定義成一個樹型結構,它由path和group對象組成。每條path包含對象輪廓的幾何形狀,每個group包含了變化的詳細信息。所有path的繪製順序和它們在XML出現的順序相同;

2.VectorDrawableXML文件生成

        AndroidStudio包含一個稱為Vector Asset Studio的工具,它提供了一個簡單的方法將矢量圖以XML文件的形式添加到項目中。支持如下兩種方式:

        添加Meterial Icon;導入可拉伸矢量圖(SVG)和Adobe Photoshop文檔(PSD)文件;

3.使用矢量圖的優點:

        圖片擴展性:它可以進行縮放並且不損失圖片的質量,這意味著使用同一個文件對不同屏幕密度調整大小並不損失圖片的質量;(提高了安卓機型解析度適配性)

        圖片大小更小:同樣大小和內容圖片下相比,矢量圖比PNG圖片更小,這樣就能得到更小的APK文件和更少的維護工作;(可減小apk安裝包的體積)

        實例:小編測試應用,使用矢量圖代替png,減少了幾千張圖,apk安裝包小了10M左右。

4.缺點

      系統渲染VectorDrawable需要花費更多時間。因為矢量圖的初始化加載會比相應的光柵圖片消耗更多的CPU周期,但是兩者之間的內存消耗和性能接近。因此我們可以只考慮在顯示小圖片的時候使用矢量圖(建議限制矢量圖在200*200dp),越大的圖片在屏幕上顯示會消耗更長的時間進行繪製;

      實例:小編所測試應用,底部tab,僅在首次加載SVG時,相較之前時間增加50%左右。

相關焦點

  • Android SVG使用之AnimatedVectorDrawable
    <vector>定義這個矢量圖android:name 矢量圖的名字android:width 矢量圖的內部(intrinsic)寬度,支持所有Android系統支持的尺寸,通常使用dpandroid:height 矢量圖的內部(intrinsic)高度android:viewportWidth
  • Android 高級動畫開發系列 矢量圖動畫
    有矢量圖動畫VectorDrawable,靜態VectorDrawable,動態VectorDrawable,軌跡動畫,路徑變換動畫,並指出了目前常見的一些兼容性問題。乾貨滿滿。學習矢量圖動畫之前,我們需要先回顧一下屬性動畫的知識點,動態矢量圖動畫是需要結合屬性動畫來實現的。
  • 帶你了解 Android 約束布局 ConstraintLayout
    所以極力推薦使用ConstraintLayout來編寫布局。本文主要介紹一下如何使用代碼來編寫ConstraintLayout布局。好了,開始我們的徵程。ConstraintLayout簡介ConstraintLayout,可以翻譯為約束布局,在2016年Google I/O 大會上發布。我們知道,當布局嵌套過多時會出現一些性能問題。
  • 像素與解析度,位圖與矢量圖
    02位圖與矢量圖1. 位圖又稱點陣圖像或柵格圖像,是最小單位由像素構成的圖,縮放會失真。常見位圖文件格式: jpg、png、gif、bmp、psd、tif等。Photoshop主要處理的是位圖圖像。2.
  • Android 代碼規範文檔
    經驗總結:編碼不規範,同行淚兩行使用 0px 代替 0dp,這樣就可以在獲取時避免系統進行換算,提升代碼的執行效率。字符串比較,應該用 "xxx".equals(object),而不應該用 object.equals("xxx"),因為 object 對象可能為空,我們應該把不為空的條件放置在表達式的前面。
  • android 播放gif動態圖片
    android不推薦使用gif圖片,一般都是png的,對於gif的圖片解析比較消耗資源,但是對於一些動態gif圖片的播放,如果比較小的話還是可以的,要是大的話,建議還是把gif圖片轉換成一幀一幀的png圖片,然後通過animation播放。
  • Android基礎 - 如何做魯棒性更高的布局
    :使用RelativeLayout構建的布局.png這可能會直接導致界面混亂,以至於出現「換了個手機就不能用了」的尷尬情況,那麼如何避免此類問題呢?使用LinearLayout構建的布局沒有問題.png使用LinearLayout布局可以更加方便的完成如上圖所示的布局,但在此之前,我們需要明白一個在LinearLayout布局中的子布局特有的屬性:layout_weight,當一個子布局放在
  • Android Webp 完全解析 快來縮小apk的大小吧
    至於什麼是webp,使用webp有什麼好處我就不贅述了,具體可以參考騰訊isux上的這篇文章WebP 探尋之路(http://isux.tencent.com/introduction-of-webp.html),大致了解下就ok了。入手大致需要考慮以下幾個問題:如何將現有的jpeg/png等圖轉化為webp?webp格式的圖片如何使用?
  • 使用MATLAB繪圖時,如何保存高清矢量圖
    使用MATLAB繪圖時,若直接在圖窗中保存或截圖保存,在Word文檔中插入保存的文件時會很模糊。為解決這個問題,常將MATLAB繪製的圖以矢量圖格式進行保存,下面進行介紹。首先使用plot()函數繪製曲線圖,示例代碼如下:x=0:0.1:2*pi;y=sin(x);plot(x,y);在彈出圖窗後有以下兩種方法保存為高清矢量圖。1.
  • PPT,visio,word 繪圖如何獲得矢量圖?
    不少用戶在寫論文的時候,習慣了使用 office 繪製示意圖,在進行論文寫作的時候,通常是把圖片進行導出 png 圖片,然後插入到 word 文檔裡
  • 來開發一個wanandroid快應用吧
    一、環境搭建1.安裝nodejsnodejs可以在官網下載快應用文檔說是不要使用8.0.*版本,推薦v6.11.3 LTS一開始以為是8以上不能用,查了下我電腦的是8.2.0,本來打算退回去的,嘗試之後發現沒有報錯可以正常使用。
  • 玩Android 快應用已經開源啦~
    關於日誌查看,官方文檔介紹是使用Android Studio的Android Monitor輸出來查看日誌。這裡通過wanandroid開發api來開發wanandroid應用http://www.wanandroid.com/blog/show/21.修改manifest.json配置信息{  "package": "cn.codebear.wanandroid",  "name": "wanandroid
  • PS教程:保存清晰透明的.Png格式圖片的方法和技巧教程
    不推薦使用『png 不透明』格式,建議用jpg圖片來代替它。 可能會有同學會問為什麼png24是不透明的,我使用photoshop導出來的就是png24啊?2.只能為不透明或全透明3.文件體積小4.帶有雜邊鋸齒5.支持IE6 如何使用Photoshop導出『png8 索引透明』使用Photoshop,存儲為web所有格式,按照如下圖片的紅色邊框配置,可導出png8索引透明註:使用PS導出『png8 索引透明』的效果比Fireworks導出的效果良好,這裡不介紹使用
  • Android Glide庫使用,一句話完成圖片加載、gif、高斯模糊等 && 【菜鳥窩的三個實戰項目推薦】
    SVG矢量圖課時5:在Android中使用iconfont圖標.,在5.0一下優勢很大,5.0以上系統默認使用的內存管理和Fresco類似..很多在職或求職的朋友,涉及到商城類項目開發時,都必須膜拜學習的商城類經典實戰課程,可以避免很多坑
  • Android 多主題之坑
    當然如果某些控制項在夜間模式下的需求只是簡單的顏色取反,對於這種情況,框架是應當給予適配支持的(不能一棒子打死嘛),因為這種特性支持很簡單,所以可以在基本不增加框架學習使用成本的前提下,大大減少程式設計師的重複編碼,提高了開發效率。關於ColorDrawableAPI21以下是不支持染色的,所以從兼容性上考慮,一般地對ColorDrawable直接new而不是染色。
  • Photoshop使用鋼筆工具與形狀工具繪製矢量圖
    一、位圖和矢量圖的區別1、概念位圖圖像,又稱為像素圖,圖片由一個一個像素組成,我們用手拍的照片就是像素圖。輪廓、大小和屏幕位置等屬性,如機械、建築用的CAD畫的圖就屬於矢量圖。同內容圖像的位圖和矢量圖的大小、格式也不一樣。3、路徑、形狀、像素鋼筆工具與形狀工具的形狀、路徑選項,繪製的圖形屬於矢量圖,可以無損放大縮小;形狀工具的像素選項,繪製圖形屬於位圖,放大縮小毀損像素。
  • Android P 劉海屏適配全攻略
    要確定這些凹口屏幕區域是否存在及其位置,請使用 getDisplayCutout() 函數。全新的窗口布局屬性 layoutInDisplayCutoutMode 讓您的應用可以為設備凹口屏幕周圍的內容進行布局。
  • 寫給Android開發的Gradle知識體系
    1.png所有構建文件在 Gradle Scripts 層級下顯示,大概介紹下這些文件的用處。項目build.gradle:配置項目的整體屬性,比如指定使用的代碼倉庫、依賴的Gradle插件版本等等。模塊build.gradle:配置當前Module的編譯參數。
  • Android ADB 命令行
    命令格式:adb [-d|-e|-s <serialNumber>] <command>如果只有一個設備/模擬器連接時,可以省略掉 [-d|-e|-s <serialNumber>] 這一部分,直接使用 adb <command>。