Skip to content

Commit 744da8a

Browse files
committed
recode Parser.
1 parent 88ae04d commit 744da8a

File tree

3 files changed

+207
-168
lines changed

3 files changed

+207
-168
lines changed

app/src/main/java/com/example/ponycui_home/svgaplayer/MainActivity.java

+32
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,13 @@
3131
import org.jetbrains.annotations.NotNull;
3232

3333
import java.io.IOException;
34+
import java.io.InputStream;
3435
import java.net.URL;
3536

37+
import kotlin.Unit;
38+
import kotlin.jvm.functions.Function1;
39+
import kotlin.jvm.functions.Function3;
40+
import okhttp3.CacheControl;
3641
import okhttp3.Call;
3742
import okhttp3.Callback;
3843
import okhttp3.OkHttpClient;
@@ -62,6 +67,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
6267

6368
private void loadAnimation() {
6469
SVGAParser parser = new SVGAParser(this);
70+
resetDownloader(parser);
6571
try {
6672
parser.parse(new URL("https://github.com/yyued/SVGA-Samples/blob/master/angel.svga?raw=true"), new SVGAParser.ParseCompletion() {
6773
@Override
@@ -80,4 +86,30 @@ public void onError() {
8086
}
8187
}
8288

89+
/**
90+
* 设置下载器,这是一个可选的配置项。
91+
* @param parser
92+
*/
93+
private void resetDownloader(SVGAParser parser) {
94+
parser.setFileDownloader(new SVGAParser.FileDownloader() {
95+
@Override
96+
public void resume(final URL url, final Function1<? super InputStream, Unit> complete, final Function1<? super Exception, Unit> failure) {
97+
new Thread(new Runnable() {
98+
@Override
99+
public void run() {
100+
OkHttpClient client = new OkHttpClient();
101+
Request request = new Request.Builder().url(url).get().build();
102+
try {
103+
Response response = client.newCall(request).execute();
104+
complete.invoke(response.body().byteStream());
105+
} catch (IOException e) {
106+
e.printStackTrace();
107+
failure.invoke(e);
108+
}
109+
}
110+
}).start();
111+
}
112+
});
113+
}
114+
83115
}

library/src/main/java/com/opensource/svgaplayer/SVGACanvasDrawer.kt

+20-34
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
package com.opensource.svgaplayer
22

33
import android.graphics.*
4-
import android.os.Build
5-
import android.R.attr.x
64
import android.widget.ImageView
75

86

97
/**
108
* Created by cuiminghui on 2017/3/29.
119
*/
1210

13-
class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicEntity, val canvas: Canvas) : SGVADrawer(videoItem) {
11+
class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicEntity, private val canvas: Canvas) : SGVADrawer(videoItem) {
1412

15-
val sharedPaint = Paint()
16-
val sharedPath = Path()
17-
val sharedContentTransform = Matrix()
13+
private val sharedPaint = Paint()
14+
private val sharedPath = Path()
15+
private val sharedContentTransform = Matrix()
1816

1917
override fun drawFrame(frameIndex: Int, scaleType: ImageView.ScaleType) {
2018
super.drawFrame(frameIndex, scaleType)
@@ -111,20 +109,19 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
111109

112110
private fun drawImage(sprite: SVGADrawerSprite, scaleType: ImageView.ScaleType) {
113111
(dynamicItem.dynamicImage[sprite.imageKey] ?: videoItem.images[sprite.imageKey])?.let {
114-
val drawingBitmap = it
115112
sharedPaint.reset()
116113
sharedContentTransform.reset()
117114
sharedPaint.isAntiAlias = videoItem.antiAlias
118115
sharedPaint.alpha = (sprite.frameEntity.alpha * 255).toInt()
119116
performScaleType(scaleType)
120117
sharedContentTransform.preConcat(sprite.frameEntity.transform)
121-
sharedContentTransform.preScale((sprite.frameEntity.layout.width / drawingBitmap.width).toFloat(), (sprite.frameEntity.layout.width / drawingBitmap.width).toFloat())
118+
sharedContentTransform.preScale((sprite.frameEntity.layout.width / it.width).toFloat(), (sprite.frameEntity.layout.width / it.width).toFloat())
122119
if (sprite.frameEntity.maskPath != null) {
123120
val maskPath = sprite.frameEntity.maskPath ?: return@let
124121
canvas.save()
125122
canvas.concat(sharedContentTransform)
126-
canvas.clipRect(0, 0, drawingBitmap.width, drawingBitmap.height)
127-
val bitmapShader = BitmapShader(drawingBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)
123+
canvas.clipRect(0, 0, it.width, it.height)
124+
val bitmapShader = BitmapShader(it, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)
128125
sharedPaint.shader = bitmapShader
129126
sharedPaint.isAntiAlias = true
130127
sharedPath.reset()
@@ -133,17 +130,15 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
133130
canvas.restore()
134131
}
135132
else {
136-
canvas.drawBitmap(drawingBitmap, sharedContentTransform, sharedPaint)
133+
canvas.drawBitmap(it, sharedContentTransform, sharedPaint)
137134
}
138-
drawText(drawingBitmap, sprite)
135+
drawText(it, sprite)
139136
}
140137
}
141138

142139
private fun drawText(drawingBitmap: Bitmap, sprite: SVGADrawerSprite) {
143-
dynamicItem.dynamicText[sprite.imageKey]?.let {
144-
val drawingText = it
145-
dynamicItem.dynamicTextPaint[sprite.imageKey]?.let {
146-
val drawingTextPaint = it
140+
dynamicItem.dynamicText[sprite.imageKey]?.let { drawingText ->
141+
dynamicItem.dynamicTextPaint[sprite.imageKey]?.let { drawingTextPaint ->
147142
val textBitmap = Bitmap.createBitmap(drawingBitmap.width, drawingBitmap.height, Bitmap.Config.ARGB_8888)
148143
val textCanvas = Canvas(textBitmap)
149144
drawingTextPaint.isAntiAlias = true
@@ -178,8 +173,7 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
178173
sharedContentTransform.reset()
179174
performScaleType(scaleType)
180175
sharedContentTransform.preConcat(sprite.frameEntity.transform)
181-
sprite.frameEntity.shapes.forEach {
182-
val shape = it
176+
sprite.frameEntity.shapes.forEach { shape ->
183177
sharedPath.reset()
184178
shape.shapePath?.let {
185179
sharedPath.addPath(it)
@@ -223,25 +217,17 @@ class SVGACanvasDrawer(videoItem: SVGAVideoEntity, val dynamicItem: SVGADynamicE
223217
sharedPaint.strokeWidth = it
224218
}
225219
shape.styles?.lineCap?.let {
226-
if (it.equals("butt", true)) {
227-
sharedPaint.strokeCap = Paint.Cap.BUTT
228-
}
229-
else if (it.equals("round", true)) {
230-
sharedPaint.strokeCap = Paint.Cap.ROUND
231-
}
232-
else if (it.equals("square", true)) {
233-
sharedPaint.strokeCap = Paint.Cap.SQUARE
220+
when {
221+
it.equals("butt", true) -> sharedPaint.strokeCap = Paint.Cap.BUTT
222+
it.equals("round", true) -> sharedPaint.strokeCap = Paint.Cap.ROUND
223+
it.equals("square", true) -> sharedPaint.strokeCap = Paint.Cap.SQUARE
234224
}
235225
}
236226
shape.styles?.lineJoin?.let {
237-
if (it.equals("miter", true)) {
238-
sharedPaint.strokeJoin = Paint.Join.MITER
239-
}
240-
else if (it.equals("round", true)) {
241-
sharedPaint.strokeJoin = Paint.Join.ROUND
242-
}
243-
else if (it.equals("bevel", true)) {
244-
sharedPaint.strokeJoin = Paint.Join.BEVEL
227+
when {
228+
it.equals("miter", true) -> sharedPaint.strokeJoin = Paint.Join.MITER
229+
it.equals("round", true) -> sharedPaint.strokeJoin = Paint.Join.ROUND
230+
it.equals("bevel", true) -> sharedPaint.strokeJoin = Paint.Join.BEVEL
245231
}
246232
}
247233
shape.styles?.miterLimit?.let {

0 commit comments

Comments
 (0)