下面列出了android.view.SurfaceHolder.Callback#master.flame.danmaku.controller.DrawHandler 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void stopDraw() {
DrawHandler handler = this.handler;
this.handler = null;
unlockCanvasAndPost();
if (handler != null) {
handler.quit();
}
if (this.mHandlerThread != null) {
HandlerThread handlerThread = this.mHandlerThread;
this.mHandlerThread = null;
try {
handlerThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
handlerThread.quit();
}
}
private void danmuku(InputStream inputStream) {
if (mDanmakuView != null) {
mParser = DanmakuHelper.createParser(inputStream);
mDanmakuView.setCallback(new DrawHandler.Callback() {
@Override
public void updateTimer(DanmakuTimer timer) {
}
@Override
public void danmakuShown(BaseDanmaku danmaku) {
}
@Override
public void drawingFinished() {
}
@Override
public void prepared() {
mIsDanmakuReday = true;
}
});
mDanmakuView.setOnDanmakuClickListener(new IDanmakuView.OnDanmakuClickListener() {
@Override
public void onDanmakuClick(BaseDanmaku latest) {
// Log.d("DFM", "onDanmakuClick text:" + latest.text);
}
@Override
public void onDanmakuClick(IDanmakus danmakus) {
// Log.d("DFM", "onDanmakuClick danmakus size:" + danmakus.size());
}
});
mDanmakuView.prepare(mParser, mDanmakuContext);
mDanmakuView.enableDanmakuDrawingCache(true);
// mDanmakuView.showFPS(true);
}
}
@Override
public void start(long postion) {
if (handler == null) {
prepare();
} else {
handler.removeCallbacksAndMessages(null);
}
handler.obtainMessage(DrawHandler.START, postion).sendToTarget();
}
/**
* danmuku init
*/
public void initDanMuKu(){
//弹幕
// 设置最大显示行数
HashMap<Integer, Integer> maxLinesPair = new HashMap<Integer, Integer>();
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 10); // 滚动弹幕最大显示10行
// 设置是否禁止重叠
HashMap<Integer, Boolean> overlappingEnablePair = new HashMap<Integer, Boolean>();
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true);
danmakuContext = DanmakuContext.create();
danmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 5).setDuplicateMergingEnabled(false)
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair).setDanmakuMargin(20);
danmakuView = findViewById(R.id.danmaku_view);
danmakuView.enableDanmakuDrawingCache(true);
danmakuView.setCallback(new DrawHandler.Callback() {
@Override
public void prepared() {
showDanmaku = true;
danmakuView.start();
}
@Override
public void updateTimer(DanmakuTimer timer) {
}
@Override
public void danmakuShown(BaseDanmaku danmaku) {
}
@Override
public void drawingFinished() {
}
});
danmakuView.prepare(parser, danmakuContext);
}
public void setCallback(DrawHandler.Callback callback) {
this.mCallback = callback;
if (this.handler != null) {
this.handler.setCallback(callback);
}
}
private void prepare() {
if (this.handler == null) {
this.handler = new DrawHandler(getLooper(this.mDrawingThreadType), this, this.mDanmakuVisible);
}
}
private void prepare() {
if (this.handler == null) {
this.handler = new DrawHandler(getLooper(this.mDrawingThreadType), this, this.mDanmakuVisible);
}
}
private void prepare() {
if (this.handler == null) {
this.handler = new DrawHandler(getLooper(this.mDrawingThreadType), this, this.mDanmakuVisible);
}
}