플레이어를 iOS / Android / Web / Flutter / HarmonyOS에 통합
아래 설치 절차와 예제 코드는 각 프로젝트의 공식 README에서 정리한 것입니다. 전체 매개변수, 최신 버전, 변경 사항은 해당 저장소를 기준으로 확인하세요.
iOS
네이티브 CoreAnimation으로 렌더링하며 앱 번들 또는 원격 서버에서 SVGA 파일을 불러올 수 있습니다.
설치
Podfile에 종속성을 추가한 뒤 pod install을 실행합니다.
target 'MyApp' do
pod 'SVGAPlayer', '~> 2.3'
end재생
SVGAPlayer와 SVGAParser를 만들고 파싱이 끝나면 videoItem을 설정한 뒤 재생을 시작합니다.
SVGAPlayer *player = [[SVGAPlayer alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
[self.view addSubview:player];
SVGAParser *parser = [[SVGAParser alloc] init];
[parser parseWithNamed:@"posche" inBundle:nil completionBlock:^(SVGAVideoEntity *videoItem) {
if (videoItem != nil) {
player.videoItem = videoItem;
[player startAnimation];
}
} failureBlock:nil];참고
- 원격 서버에서 불러올 때는 parseWithURL:completionBlock:failureBlock:을 사용합니다.
- 이미지 동적 교체, 텍스트 추가, 요소 숨기기, 사용자 지정 그리기를 지원합니다. 자세한 내용은 저장소 Wiki를 참고하세요.
Android
네이티브 Android Canvas로 렌더링하며 assets 또는 원격 서버에서 애니메이션을 불러올 수 있습니다.
설치
루트 build.gradle에 JitPack 저장소를 추가하고 app/build.gradle에 종속성을 추가합니다.
// root build.gradle
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
// app/build.gradle
implementation 'com.github.svga:SVGAPlayer-Android:2.6.1'재생
레이아웃에 SVGAImageView를 추가하고 애니메이션 리소스를 지정한 뒤 자동 재생을 켭니다.
<com.opensource.svgaplayer.SVGAImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:source="posche.svga"
app:autoPlay="true" />참고
- SVGAParser 싱글턴을 사용하기 전에 SVGAParser.shareParser().init(context)를 호출해야 합니다.
- 난독화할 때는 com.squareup.wire.**와 com.opensource.svgaplayer.proto.**를 유지하세요.
- README 예제의 compile은 이전 Gradle 문법입니다. 새 프로젝트에서는 implementation을 사용합니다.
Web
기능이 완전한 Web 플레이어로 SVGA 1.x(JSZip 필요), 오디오 재생, IE 호환 모드를 지원합니다.
설치
npm으로 설치하거나 CDN 빌드를 직접 불러옵니다.
npm install svgaplayerweb --save
<!-- 또는 직접 불러오기 -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/svga.min.js"></script>재생
컨테이너를 준비하고 Player와 Parser를 만든 뒤 애니메이션을 불러와 재생합니다.
<div id="demoCanvas"></div>
<script>
const player = new SVGA.Player('#demoCanvas');
const parser = new SVGA.Parser('#demoCanvas');
parser.load('rose.svga', (videoItem) => {
player.setVideoItem(videoItem);
player.startAnimation();
});
</script>참고
- SVGA 1.x를 지원하려면 JSZip을 추가로 불러와야 합니다. 오디오를 재생하려면 howler.js를 불러옵니다.
- 더 작은 크기가 필요하면 Web Lite를 사용하세요.
Web Lite
모바일 Web을 위한 경량 플레이어로 크기가 60KB 미만(gzip 18KB 미만)이며 WebWorker로 파싱합니다.
설치
npm으로 설치하거나 unpkg CDN 빌드를 사용합니다.
npm i svga
<!-- 또는 직접 불러오기 -->
<script src="https://unpkg.com/svga/dist/index.min.js"></script>재생
Parser를 만들어 애니메이션을 읽고 canvas에 마운트한 뒤 재생을 시작합니다.
import { Parser, Player } from 'svga'
const parser = new Parser()
const svga = await parser.load('xx.svga')
const player = new Player(document.getElementById('canvas'))
await player.mount(svga)
player.start()참고
- SVGA 1.x 형식과 오디오 재생은 지원하지 않습니다.
- Android 4.4+ / iOS 9+와 호환됩니다.
Flutter
CustomPainter 기반 Flutter 구현으로 로컬 assets 또는 원격 서버에서 애니메이션을 불러올 수 있습니다.
설치
pubspec.yaml에 종속성을 추가합니다.
dependencies:
svgaplayer_flutter: ^2.0.0재생
가장 간단한 방법은 SVGASimpleImage를 사용하는 것입니다. 세밀한 제어가 필요하면 SVGAAnimationController를 사용합니다.
SVGASimpleImage(
resUrl: 'https://github.com/svga/SVGA-Samples/blob/master/angel.svga?raw=true',
)참고
- SVGA 2.0 형식만 지원합니다.
- 리소스 캐시는 dio 같은 라이브러리로 직접 처리하고, 캐시 데이터는 SVGAParser의 바이트 디코딩 메서드로 처리해야 합니다.
HarmonyOS
HarmonyOS NEXT를 위한 SVGA 플레이어로 선언형 UI 1.0 / 2.0 컴포넌트를 제공합니다.
설치
OHPM으로 설치합니다.
ohpm install @tb-open/svga재생
SVGA를 초기화하고 컨트롤러를 만든 뒤 SvgaPlayerV2로 애니메이션을 렌더링합니다.
import { Svga, SvgaController, SvgaPlayerV2 } from '@tb-open/svga'
// AbilityStage.onCreate
Svga.init(this.context)
private controller: SvgaController = new SvgaController({
loops: 3,
fillMode: 'forwards',
autoRelease: true,
clearsAfterStop: true
})
SvgaPlayerV2({
url: $r('app.media.example_animation'),
controller: this.controller
})
.width(300)
.height(150)참고
- 앱 리소스, 원격 URL, 샌드박스 파일 경로를 지원합니다.
- 컨트롤러로 재생을 제어하고 이미지와 텍스트를 교체하며 재생 진행률과 클릭 이벤트를 수신할 수 있습니다.