private void init() {
    danmakuView.prepare(new BiliDanmukuParser(), danmukuContext);

    danmakuView.setCallback(
        new DrawHandler.Callback() {
          @Override
          public void prepared() {
            danmakuView.start();
          }

          @Override
          public void updateTimer(DanmakuTimer timer) {}

          @Override
          public void danmakuShown(BaseDanmaku danmaku) {}

          @Override
          public void drawingFinished() {}
        });
    danmakuView.enableDanmakuDrawingCache(true);
  }
  @OnClick(R.id.danmu_add)
  void addDanmu() {
    i++;
    BaseDanmaku danmaku = danmukuContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);

    Log.d("tag", "测试用弹幕 + " + i + "条");
    danmaku.text = "测试用弹幕 + " + i + "条";

    danmaku.padding = 10;
    danmaku.priority = 1; // 1:一定会显示, 一般用于本机发送的弹幕,但会导致行数的限制失效
    danmaku.isLive = false;
    danmaku.textSize = 20;
    danmaku.textColor = Color.WHITE;
    danmaku.textShadowColor = 0; // 重要:如果有图文混排,最好不要设置描边(设textShadowColor=0),否则会进行两次复杂的绘制导致运行效率降低
    danmakuView.addDanmaku(danmaku);
  }