1. 程式人生 > >SVG-Android開源庫——專案簡單接入與使用

SVG-Android開源庫——專案簡單接入與使用

SVG-Android最新版本1.3.2釋出已經發布,Jcenter和MavenCentral都已經上傳,開發者可以非常方便地在Android Studio中接入。

SVG-Android框架主要分為兩部分:SVG-Support庫和SVG-Generator庫。前者用於專案依賴,提供一些擴充套件元件和功能,後者用於SVG資源的構建。同時,為了簡化接入的過程,提供了gradle整合外掛SVG-Plugin。

我們以SVG-Sample範例專案為例,簡單說明下如何快速接入。

1、gradle中配置外掛

首先,需要在app目錄的build.gradle中配置外掛:

apply plugin: 'svg'
buildscript { repositories { jcenter() } dependencies { classpath 'com.github.megatronking:svg-plugin:1.3.6' } } svg { // vector resources vectorDirs = ["src/main/svg_debug/drawable"] // shape resources shapeDir = "src/main/svg_release/drawable" // java classpath
javaDir = "src/main/java/com/github/megatronking/svg/sample/drawables" // app(module) package name packageName = "com.github.megatronking.svg.sample" }

這裡說明一下Extension的配置含義:

vectorDirs:存放vector資原始檔的目錄,這裡是設定的debug資源目錄svg_debug/drawable,主要是為了方便在xml預覽效果,而實際上不作為資原始檔目錄也沒關係。這裡是支援多個vector資原始檔目錄,作為陣列配置多個就可以。

shapeDir:自動生成空白shape資原始檔的目錄,這個目錄必須作為資原始檔目錄打到apk包中,不然無法生成R檔案。

javaDir: 自動生成Java圖片渲染檔案的目錄,定義成Java原始碼目錄就可以,會在下面自動生成Java原始檔。

packageName:包(模組)名,保持和R檔案對應包一致就可以。可以不配置,預設為applicationId

當然,如果你希望直接使用svg格式檔案,而不是手動生成或者使用現成的vector檔案,可以使用svg2vector配置,直接處理svg格式檔案!

svg2vector {
        svg_a {
            svgDir = "${rootDir}/svg_a"
            vectorDir = "src/main/res_svg/drawable"
            // 配置生成的vector尺寸,不設定預設使用圖片原始尺寸
            width = 48
            height = 48
        }
        svg_b {
            svgDir = "${rootDir}/svg_b"
            vectorDir = "src/main/res_svg/drawable"
            width = 48
            height = 48
        }
    }

為了方便svg格式檔案分類,這裡支援處理多個svg檔案目錄。比如,在SVG-Sample中有兩個存放svg檔案目錄(專案根目錄下svg_a和svg_b)。svg格式檔案自動生成vector檔案,需要四個配置引數,詳細作用如下:

svgDir:存放svg檔案的目錄。

vectorDir :自動生成vector檔案的目錄。

width:圖片寬度,可以不配置,預設為圖片原始尺寸,對應vector檔案的android:width屬性,單位為dp。

height:圖片高度,可以不配置,預設為圖片原始尺寸,對應vector檔案的android:height屬性,單位為dp。

最後,還需要配置svg-support庫的依賴:

dependencies {
    compile 'com.github.megatronking:svg-support:1.3.1'
}

配置好後sync一下gradle,svg-support,svg-plugin以及其依賴svg-generator會自動down下來,這樣就可以進行下一步操作了。

2、執行gradle外掛task

在執行task之前,我們需要一張SVG格式圖片,以下面這張紅色Android機器人的SVG圖片為例:

這裡寫圖片描述

<?xml version="1.0" encoding="iso-8859-1"?>
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 24 24" x="0px" 
     xmlns="http://www.w3.org/2000/svg" y="0px" xml:space="preserve">
    <path style="fill:#FF0000;" d="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/>
</svg>

將其放置到上一步配置svg_a圖片目錄下。

接下來,我們可以命令列中執行task任務:

gradlew svgAssemble

或者,習慣使用gradle面板的,可以在裡面直接點選svgAssemble:

這裡寫圖片描述

執行完成svgAssemble任務後,能夠在前面配置的shapeDir以及javaDir目錄下,生成對應的Java Renderer類和空白shape檔案,檔名都為圖片名:

這裡寫圖片描述

這裡寫圖片描述

當然,還有vectorDir目錄下生成的vector檔案:

這裡寫圖片描述

3、載入SVGLoader

上一步中除了生成Java Renderer檔案和空白shape資原始檔外,還會生成SVGLoader.java檔案。SVGLoader需要裝載到Application中,這樣才能實現資原始檔的攔截。

public class SampleApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SVGLoader.load(this);
    }
}

這樣一來所有的準備工作以及關於SVG圖片的處理就完全就緒了,下面我們來看看如何使用。

4、SVG圖片的使用

SVG-Android圖片的使用方式和普通的PNG圖一樣,可以直接在layout中直接對ImageView設定android:src=”@drawable/ic_android_red”,同時還支援預覽圖片功能:

這裡寫圖片描述

當然,還可以在程式碼中使用:

ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageResource(R.drawable.ic_android_red);

甚至,你還可以不使用資原始檔,直接使用Renderer類建立圖片:

ImageView imageView = (ImageView) findViewById(R.id.image);
SVGDrawable drawable = new SVGDrawable(new ic_android_red(this));
imageView.setImageDrawable(drawable);

最後,執行一下,可以完美地在Android 4.0及以上系統中顯示出來,並且完全不會因為圖片尺寸的壓縮或放大而失真!

本部落格不定期持續更新,歡迎關注和交流: