internal int GetMarginTop(DanmakuView view)
 {
     return(view.Danmaku.Mode switch
     {
         Danmaku.DanmaukuMode.Scroll => GetScrollY(view),
         Danmaku.DanmaukuMode.Top => GetTopY(view),
         Danmaku.DanmaukuMode.Bottom => GetBottomY(view),
         _ => - 1,
     });
예제 #2
0
        /// <summary>
        /// 发送一条弹幕
        /// </summary>
        public int Send(Danmaku danmaku)
        {
            if (DanmakuViewPool == null)
            {
                throw new ArgumentNullException("Danmaku view pool is null. Did you call init() first?");
            }
            DanmakuView view = DanmakuViewPool.Get();

            if (view == null)
            {
                MeVisual.Warn(TAG, "show: Too many danmaku, discard");
                return(RESULT_FULL_POOL);
            }
            if (DanmakuContainer == null || DanmakuContainer.Get() == null)
            {
                MeVisual.Warn(TAG, "show: Root view is null.");
                return(RESULT_NULL_ROOT_VIEW);
            }
            view.SetDanmaku(danmaku);
            // 字体大小
            int textSize = danmaku.Size;

            view.SetTextSize(ComplexUnitType.Px, textSize);
            // 字体颜色
            try
            {
                var color = Color.ParseColor(danmaku.Color);
                view.SetTextColor(color);
            }
            catch
            {
                view.SetTextColor(Color.White);
            }
            // 计算弹幕距离顶部的位置
            int marginTop = PositionCalculator.GetMarginTop(view);

            if (marginTop == -1)
            {
                // 屏幕放不下了
                MeVisual.Debug(TAG, "send: screen is full, too many danmaku [" + danmaku + "]");
                return(TOO_MANY_DANMAKU);
            }
            FrameLayout.LayoutParams p = (FrameLayout.LayoutParams)view.LayoutParameters;
            if (p == null)
            {
                p = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
            }
            p.TopMargin           = marginTop;
            view.LayoutParameters = p;
            view.SetMinHeight((int)(Config.LineHeight * 1.35));
            view.Show(DanmakuContainer.Get(), GetDisplayDuration(danmaku));
            return(RESULT_OK);
        }