package com.jaf.biubiu;
import android.content.res.Resources;
import android.graphics.Color;
import com.jaf.jcore.Application;
import java.io.InputStream;
import java.util.Random;
import master.flame.danmaku.controller.DrawHandler;
import master.flame.danmaku.controller.IDanmakuView;
import master.flame.danmaku.danmaku.loader.ILoader;
import master.flame.danmaku.danmaku.loader.IllegalDataException;
import master.flame.danmaku.danmaku.loader.android.DanmakuLoaderFactory;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
import master.flame.danmaku.danmaku.model.DanmakuTimer;
import master.flame.danmaku.danmaku.model.android.DanmakuGlobalConfig;
import master.flame.danmaku.danmaku.model.android.Danmakus;
import master.flame.danmaku.danmaku.parser.BaseDanmakuParser;
import master.flame.danmaku.danmaku.parser.DanmakuFactory;
import master.flame.danmaku.danmaku.parser.IDataSource;
import master.flame.danmaku.danmaku.parser.android.BiliDanmukuParser;
/**
* Created by jarrah on 2015/4/23.
*/
public class DanmuHelper {
private IDanmakuView mDanmakuView;
private BaseDanmakuParser mParser;
private static DanmuHelper sDanmuHelper = new DanmuHelper();
public static void setupDanmu(IDanmakuView view) {
sDanmuHelper.mDanmakuView = view;
sDanmuHelper.init();;
}
private BaseDanmakuParser createParser(InputStream stream) {
if (stream == null) {
return new BaseDanmakuParser() {
@Override
protected Danmakus parse() {
return new Danmakus();
}
};
}
ILoader loader = DanmakuLoaderFactory
.create(DanmakuLoaderFactory.TAG_BILI);
try {
loader.load(stream);
} catch (IllegalDataException e) {
e.printStackTrace();
}
BaseDanmakuParser parser = new BiliDanmukuParser();
IDataSource<?> dataSource = loader.getDataSource();
parser.load(dataSource);
return parser;
}
public static void addDanmaku(IDanmakuView danmakuView, boolean islive,
String text) {
BaseDanmaku danmaku = DanmakuFactory.createDanmaku(
BaseDanmaku.TYPE_SCROLL_RL, danmakuView.getWidth(),
danmakuView.getHeight(), 10);
if (text == null)
danmaku.text = "这是一条弹幕, 继续点击屏幕吧" + System.nanoTime();
else
danmaku.text = text;
danmaku.padding = (int) Device.dp2px(5);
danmaku.priority = 1;
danmaku.isLive = islive;
danmaku.time = danmakuView.getCurrentTime() + 1250;
danmaku.textSize = Device.sp2px(18);
danmaku.textColor = randomColor();
danmaku.textShadowColor = Color.parseColor("#838383");
danmakuView.addDanmaku(danmaku);
}
private static int randomColor() {
Resources resources = Application.getInstance().getApplicationContext()
.getResources();
int[] colors = new int[]{R.color.material_deep_teal_500,
R.color.material_blue_grey_800, R.color.white,
R.color.primary_text_default_material_dark};
int max = colors.length;
int min = 0;
Random random = new Random();
int index = random.nextInt(max) % (max - min + 1) + min;
return resources.getColor(colors[index]);
}
public void init() {
mParser = createParser(Application.getInstance().getResources()
.openRawResource(R.raw.empty));
DanmakuGlobalConfig.DEFAULT.setDanmakuStyle(
DanmakuGlobalConfig.DANMAKU_STYLE_STROKEN, 3)
.setDuplicateMergingEnabled(false);
mDanmakuView.setCallback(new DrawHandler.Callback() {
@Override
public void updateTimer(DanmakuTimer timer) {
}
@Override
public void prepared() {
mDanmakuView.start();
}
});
mDanmakuView.enableDanmakuDrawingCache(true);
mDanmakuView.prepare(mParser);
}
}