【Android】SVG和VectorDrawable——相關格式轉換

?

? SVG是矢量圖,剛接觸尚不能仔細介紹,但只需記得一點:放大不失真,存儲也方便。

? 因為多數戶型圖使用SVG格式,Android要用的話必須通過相關轉換工具,將原SVG格式文件,轉換為XML后綴的VectorDrawable文件。

? 通過萬能的百度查詢,發現早已有人做好了相關轉換工具。

? 地址1——SVG2Android:這是Git上的開源項目,clone下來后在瀏覽器中打開index即可使用。

? PS:火狐瀏覽器貌似不支持Bake transforms into path (experimental),需要谷歌瀏覽器(可以勾選)或者其他瀏覽器(沒試過)。

? 地址2——SVG-Android:也是Git上的開源項目,是將SVG直接轉換為PNG這樣的圖片。

? PS:僅clone下來項目,查看了相關代碼,并沒有具體測試,因為目前暫時不需要將SVG轉為圖片來使用。

?

? 原生的正常的SVG文件可以通過上面工具轉為Android使用的VectorDrawable文件,但是我需要對SVG剪切一部分呢?在剪切、添加、修改之后,我需要對SVG進行放大或縮小呢?

? 那么你就需要Inkscape這個強大的矢量圖編輯器了。

? 做完你想要的任何效果之后,在保存的時候,你是不是一下子點擊確定,卻忘了格式是否正確呢?

? 我就是這樣,直接點擊確定,然后到AndroidStudio中去轉換(事實上AS自帶SVG轉VectorDrawable功能),發現并不能正常讀取,AS提示說這是一個空文件(或者找不到對應標簽)。

? File >>> New >>> Vector Asset >>> Local SVG file >>> Image file ...

?

? 不要苦惱,首先讀取出錯肯定是文件格式不支持,原生的SVG文件在AS中肯定得到很好的轉換效果,但你通過第三方矢量圖修改工具,進行編輯之后再保存,通常都攜帶有第三方工具的一些信息。

? 那么你就要在保存的時候,看清楚并選好相應的后綴。

?

? 我在使用的時候發現,默認的Inkscape SVG 和普通 SVG保存之后,前者會多出來很多第三方定義的信息,有什么圖層之類的。

? 而普通SVG相對而言,也僅僅是少了一些第三方信息,修改之后的結構依然是以line這樣的標簽為主,對于轉換來說,不是很友好。

? 然后我是用優化的SVG去保存,它會彈出來一些選項,通過對這些選項的舍取,保存完之后打開的SVG源代碼跟原生SVG文件幾乎沒有差別。

? 唯一多出來的是transform="matrix(a,b,c,d,e,f)"這樣的屬性,通過百度得知這是大學高數里面的矩陣變換,轉換起來有點小復雜。

? 所以AS即使能夠對【優化的SVG】文件進行轉換,預覽的效果也有所偏差,具體就是這個屬性導致的元素偏移。

? 那么回過頭來看看上面的SVG2Android工具,為什么要提Bake transforms into path (experimental)屬性呢?

? 就是因為它對transform的支持,不會使轉換之后的圖像產生一定程度上的偏移。

?

? 那么結論來了:

? 1、正常的原生SVG文件,使用AS自帶轉換器即可(特方便)。

? 2、如果AS自帶轉換器無法使用(有可能是第三方編輯器導致坐標轉換出錯),那么就使用SVG2Android去轉換格式。

? 3、如果還是無法轉換坐標,那么就使用SAX方式,解析SVG文件標簽,一一對應VectorDrawable中的標簽即可。

? 第三部分的結論目前還在編寫代碼中,事實上這僅僅是對特殊SVG文件的一種應對,相信前面兩種工具已經對普遍意義的SVG作了很好的轉換支持。

轉載于:https://www.cnblogs.com/mrzh/p/5798491.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372456.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372456.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器時間維護制度,網絡設備及服務器日常維護管理制度

第一章總則第一條:為保證機房設備與信息的安全,保障本校服務器及網絡系統在良好、穩定、高效、快速的安全運行。特制定本制度。第二條:為確保中心機房網絡設備特別是服務器安全,根據崗位職責設立機房管理員,負責對機房…

SELinux入門簡介

操作系統有兩類訪問控制:自主訪問控制(DAC)和強制訪問控制(MAC)。標準Linux安全是一種DAC,SELinux為Linux增加了一個靈活的和可配置的的MAC。 進程啟動時所擁有的權限就是運行此進程的用戶權限,…

RESTEasy教程第3部分:異常處理

在開發軟件應用程序時,異常處理是顯而易見的要求。 如果在處理用戶請求時發生任何錯誤,我們應該向用戶顯示一個錯誤頁面,其中包含詳細的異常消息,錯誤代碼(可選),更正輸入和重試的提示&#xff…

WinForm關閉窗體徹底的退出方式

//System.Environment.Exit(0); //Process.GetCurrentProcess().Kill(); //System.Threading.Thread.CurrentThread.Abort(); System.Diagnostics.Process.GetCurrentProcess().Kill();Application.Exit(); 轉載于:https://www.cnblogs.com/XuPengLB/p/5799178.html

創建css的時候選擇器有哪幾類,CSS3-CSS的選擇器共有幾類?

CSS 3對屬性選擇器的又增加了3種子字符串的匹配方式:E[att^"val"]匹配所有E元素中att屬性的值以“val”開始的所有元素。E[att$"val"]匹配所有E元素中att屬性的值以“val”結束的所有元素。E[att*”val”]匹配所有E元素中att屬性的值中包含字符…

在Grails 2.0中使用Servlet 3.0異步功能

上周,我與某人談論了Grails 2中對Servlet 3.0異步功能的新支持,并意識到我對可用功能并不了解。 所以我想我會嘗試一下并分享一些例子。 該文檔對這個主題有些了解,因此首先介紹一些背景信息。 在3.0規范中進行異步工作的主要方式是javax.ser…

接口怎么實例化?

最開始看到數據庫連接的時候忽然想到這個問題: Connection connull;try {Class.forName(Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}try {conDriverManager.getConnection(url, user, pass);} catch (SQLException e) {e.printStackTrace()…

css中基線指的是哪一條線,如何設置基線網絡_CSS, Vertical Rhythm 教程_W3cplus

首先,當談到排版,我們先要了解基線是什么?維基百科是這樣定義)的:在排版和書法中,基線是以字終sit底線為基礎,并且向兩邊延伸的直線。好極了,但我為什么要忽視他呢?好希望你充滿激情…

libvirt里的面向對象的C語言

C語言:類的聲明和定義 1 // 通用父類的定義2 struct _virClass {3 virClassPtr parent;4 5 unsigned int magic;6 char *name;7 size_t objectSize;8 9 virObjectDisposeCallback dispose; 10 }; 11 typedef struct _virClass virClass; 12 typ…

使用JGroups進行ElasticMQ消息復制

ElasticMQ是一臺消息服務器,具有Scala,Java和與Amazon SQS兼容的接口。 它通過跨服務器群集復制消息來支持有保證的消息傳遞,并通過日志記錄實現消息持久性。 消息復制是ElasticMQ的核心功能之一。 但是,如果您看一下代碼&#xf…

ajax省市二級聯動硬編碼,AJAX請求接受硬編碼的JSON,但不接受軟編碼

這個AJAX請求返回'成功'如果PHP中的輸出被復制并粘貼了JSON,但是'失敗'如果它是由文件生成的。看看下面api.php中的評論,看看我的意思。$.aj…

Fiddler高級技巧 - 映射路徑到本地文件夾

適用場景: 你是前端開發人員,要開發一個小模塊,需要用到線上的環境(賬號、數據、跨域等),但你又沒有權限往線上傳文件你是移動測試人員,需要將一組接口的返回結果替換為另一組,最簡單…

Spring Social入門

像我一樣,無論是添加簡單的Facebook“贊”按鈕,一大堆“共享”按鈕還是顯示時間軸信息,您都不會注意到當前對應用程序“社交化”的熱衷。 每個人都在做這件事,包括Spring的家伙,事實上,他們提供了一個稱為S…

apache ajax 跨域訪問,Apache 實現AJAX跨域請求

當使用ajax跨域請求時,瀏覽器報錯:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的問題,如果用jsonp或者pro更多:當使用ajax跨域請求時,瀏覽器報錯:XmlHtt…

14、數據庫

數據庫轉載于:https://www.cnblogs.com/quyong/p/6687924.html

EhCache復制:RMI與JGroups

最近,我正在研究一種需要復制緩存的產品。 緩存提供程序已經確定-EhCache,剩下的就是有關傳輸的問題。 哪一個是最佳選擇? 這里的最佳選擇是指性能更好的選擇。 僅在兩個可用傳輸之間進行了性能評估-JGroups和RMI,對其他傳輸不予考…

Oracle 監控語句整理(包括TOP SQL等)

希望能對大家有所幫助! 很多時候大家想查看oracle數據庫中的sql語句執行情況,但是又不知道如何是好,今天在這里為大家提供一個sql語句,大家可以通過以下的sql語句查詢Oracle數據庫中Top Sql情況: 查詢結果可按照PCT、總…

服務器wifi無線放大器,一回家WiFi信號太弱?教你用兩毛錢制作信號放大器

原標題:一回家WiFi信號太弱?教你用兩毛錢制作信號放大器現在家家戶戶都有無線路由器,但是大部分人都還是早期的單天線產品,信號覆蓋范圍比較小,特別是穿墻性能不行。人在客廳WiFi信號還滿格,一到臥室就瞬間…

iOS開發 之 可穿戴設備 藍牙4.0 BLE 開發

1 前言 當前有越來越多的可穿戴設備使用了藍牙4.0 BLE(Bluetooth Low Energy)。對于iOS開發而言,Apple之前專門推出CoreBluetooth的Framework來支持BLE的開發。對于硬件開發有了解的朋友應該知道,在之前使用低版本的藍牙的設備,要…

將Java服務公開為Web服務

本教程解決了開發人員面臨的最實際的情況。 大多數時候,我們可能需要將某些現有服務公開為Web服務。 在項目生命周期的不同階段可能會遇到這種情況。 如果這是初始階段,那么您幾乎是安全的,您可以為此做好充分的準備。 但是,將要發…