diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java index 72318e239..cf6d8b5d5 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java @@ -24,8 +24,10 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils; public class Parser extends BaseDanmakuParser { private final Danmu danmu; + private BaseDanmaku item; private float scaleX; private float scaleY; + private int index; public Parser(String path) { this.danmu = Danmu.fromXml(getContent(path)); @@ -43,9 +45,11 @@ public class Parser extends BaseDanmakuParser { for (Danmu.Data data : danmu.getData()) { String[] values = data.getParam().split(","); if (values.length < 4) continue; - BaseDanmaku item = createDanmaku(values); - setText(item, data.getText()); - result.addItem(item); + setParam(values); + setText(data.getText()); + synchronized (result.obtainSynchronizer()) { + result.addItem(item); + } } return result; } @@ -58,27 +62,27 @@ public class Parser extends BaseDanmakuParser { return this; } - private BaseDanmaku createDanmaku(String[] values) { + private void setParam(String[] values) { int type = Integer.parseInt(values[1]); long time = (long) (Float.parseFloat(values[0]) * 1000); float size = Float.parseFloat(values[2]) * (mDispDensity - 0.6f); int color = (int) ((0x00000000ff000000L | Long.parseLong(values[3])) & 0x00000000ffffffffL); - BaseDanmaku item = mContext.mDanmakuFactory.createDanmaku(type, mContext); + item = mContext.mDanmakuFactory.createDanmaku(type, mContext); item.setTime(time); item.setTimer(mTimer); item.textSize = size; item.textColor = color; item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; item.flags = mContext.mGlobalFlagValues; - return item; } - private void setText(BaseDanmaku item, String text) { + private void setText(String text) { + item.index = index++; DanmakuUtils.fillText(item, decodeXmlString(text)); - if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(item); + if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(); } - private void setSpecial(BaseDanmaku item) { + private void setSpecial() { String[] textArr = null; try { JSONArray jsonArray = new JSONArray(item.text);