wxr
2020-06-15 b8e94316e41eba72d927d5ca7d931b26139ee8ff
Shared.IOS/UI/RowLayout.cs
@@ -6,127 +6,117 @@
namespace Shared
{
    /// <summary>
    /// 在滑动事件下,可显示隐藏些自定义视图
    /// </summary>
    public class RowLayout : ViewGroup
    {
        ///// <summary>
        ///// OpenLeftMenuAction
        ///// </summary>
        //public Action OpenLeftMenuAction;
        ///// <summary>
        ///// OpenRightMenuAction
        ///// </summary>
        //public Action OpenRightMenuAction;
   /// <summary>
   /// 在滑动事件下,可显示隐藏些自定义视图
   /// </summary>
   public class RowLayout : ViewGroup
   {
        /// <summary>
        /// OpenMenuAction
        /// </summary>
        public Action OpenMenuAction;
        /// <summary>
        /// 右边的视图列表
        /// </summary>
        internal System.Collections.Generic.List<Button> leftView = new System.Collections.Generic.List<Button>();
        /// <summary>
        /// 右边的视图列表
        /// </summary>
        internal System.Collections.Generic.List<Button> rigthView = new System.Collections.Generic.List<Button>();
        /// <summary>
        /// 下面那边张
        /// </summary>
        UIView lineUIView = new UIView();
      /// <summary>
      /// 右边的视图列表
      /// </summary>
      internal System.Collections.Generic.List<Button> rigthView = new System.Collections.Generic.List<Button>();
      /// <summary>
      /// 下面那边张
      /// </summary>
      UIView lineUIView = new UIView();
        /// <summary>
        /// 重新刷新控件
        /// </summary>
        public override void Refresh()
        {
            base.Refresh();
            LineColor = lineColor;
        }
        /// <summary>
        /// 控件宽度
        /// </summary>
        public override int Width
        {
            get
            {
                return base.Width;
            }
            set
            {
                base.Width = value;
                if (!IsCanRefresh)
                    return;
      /// <summary>
      /// 重新刷新控件
      /// </summary>
      public override void Refresh()
      {
         base.Refresh();
         LineColor = lineColor;
      }
      /// <summary>
      /// 控件宽度
      /// </summary>
      public override int Width
      {
         get
         {
            return base.Width;
         }
         set
         {
            base.Width = value;
            if (!IsCanRefresh)
               return;
                var frame4 = lineUIView.Frame;
                frame4.Width = base.Width;
                lineUIView.Frame = frame4;
            }
        }
            var frame4 = lineUIView.Frame;
            frame4.Width = base.Width;
            lineUIView.Frame = frame4;
         }
      }
        /// <summary>
        /// 子视图的宽度
        /// </summary>
        public int SubViewWidth = 70;
      /// <summary>
      /// 子视图的宽度
      /// </summary>
      public int SubViewWidth = 70;
        /// <summary>
        /// 控件的高度
        /// </summary>
        /// <value>The height.</value>
        public override int Height
        {
            get
            {
                return base.Height;
            }
            set
            {
                base.Height = value;
                if (!IsCanRefresh)
                    return;
      /// <summary>
      /// 控件的高度
      /// </summary>
      /// <value>The height.</value>
      public override int Height
      {
         get
         {
            return base.Height;
         }
         set
         {
            base.Height = value;
            if (!IsCanRefresh)
               return;
                {
                    var frame = realViewGroup.Frame;
                    frame.Height = Height;
                    realViewGroup.Frame = frame;
                }
            {
               var frame = realViewGroup.Frame;
               frame.Height = Height;
               realViewGroup.Frame = frame;
            }
                var frame4 = lineUIView.Frame;
                frame4.Y = base.Height - frame4.Height;
                lineUIView.Frame = frame4;
            }
        }
            var frame4 = lineUIView.Frame;
            frame4.Y = base.Height - frame4.Height;
            lineUIView.Frame = frame4;
         }
      }
        uint lineColor = 0x80818181;
        /// <summary>
        /// 背景颜色
        /// </summary>
        /// <value>The color of the background.</value>
        public virtual uint LineColor
        {
            get
            {
                return lineColor;
            }
            set
            {
                lineColor = value;
                if (!IsCanRefresh)
                {
                    return;
                }
                byte r, g, b, a;
                r = (byte)(lineColor / 256 / 256 % 256);
                g = (byte)(lineColor / 256 % 256);
                b = (byte)(lineColor % 256);
                a = (byte)(lineColor / 256 / 256 / 256 % 256);
                lineUIView.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a);
            }
        }
      uint lineColor = 0x80818181;
      /// <summary>
      /// 背景颜色
      /// </summary>
      /// <value>The color of the background.</value>
      public virtual uint LineColor
      {
         get
         {
            return lineColor;
         }
         set
         {
            lineColor = value;
            if (!IsCanRefresh)
            {
               return;
            }
            byte r, g, b, a;
            r = (byte)(lineColor / 256 / 256 % 256);
            g = (byte)(lineColor / 256 % 256);
            b = (byte)(lineColor % 256);
            a = (byte)(lineColor / 256 / 256 / 256 % 256);
            lineUIView.BackgroundColor = UIKit.UIColor.FromRGBA(r, g, b, a);
         }
      }
        /// <summary>
        /// 是否正打开
@@ -191,9 +181,9 @@
            if (leftView.Count == 0)
                return;
            IsShowLeft = true;
            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(leftView[0].RealView.Frame.X, 0), false);
            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(leftView[0].RealView.Frame.X, 0), true);
            OpenMenuAction?.Invoke();
        }
@@ -215,7 +205,7 @@
                return;
            IsShowRight = true;
            var rigthViewX = realViewGroup.Frame.X + GetAllRightViewWidth();
            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(rigthViewX, 0), false);
            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(rigthViewX, 0), true);
            OpenMenuAction?.Invoke();
        }
@@ -227,8 +217,7 @@
            HideAllMenuView();
        }
        void RestMenuView()
        {
        void RestMenuView() {
            if (IsShowRight)
            {
                OpenRightMenu();
@@ -238,11 +227,10 @@
                OpenLeftMenu();
            }
            else
            {
            else {
                HideAllMenuView();
            }
        }
        void HideAllMenuView()
@@ -272,8 +260,7 @@
        /// 获取当前leftView的总宽
        /// </summary>
        /// <returns></returns>
        int GetAllLeftViewWidth()
        {
        int GetAllLeftViewWidth() {
            int mWidth = 0;
            foreach (var mView in leftView)
            {
@@ -302,39 +289,34 @@
        /// </summary>
        /// <param name="view">View.</param>
        public void AddLeftView(Button view)
        {
            if (null == view)
            {
                return;
            }
      {
         if (null == view)
         {
            return;
         }
            var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
            view.X = GetAllLeftViewWidth();
            view.Y = 0;
            view.Width = mSubViewWidth;
            view.Height = Height;
            viewGroup.AddSubview(view.RealView);
            view.Parent = this;
            view.Refresh();
            leftView.Add(view);
            var frame = realViewGroup.Frame;
            frame.X += mSubViewWidth;
            realViewGroup.Frame = frame;
            foreach (var right in rigthView)
            {
                right.X += mSubViewWidth;
            }
         view.Y = 0;
         view.Width = mSubViewWidth;
         view.Height = Height;
         viewGroup.AddSubview(view.RealView);
         view.Parent = this;
         view.Refresh();
         leftView.Add(view);
         var frame = realViewGroup.Frame;
         frame.X += mSubViewWidth;
         realViewGroup.Frame = frame;
         foreach (var right in rigthView)
         {
            right.X += mSubViewWidth;
         }
            RefreshContentSize();
      }
            //         var menuWidth = GetAllLeftViewWidth() + GetAllRightViewWidth();
            //         (viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize(menuWidth + realViewGroup.Frame.Width, 0);
            //(viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
        }
        void RefreshContentSize()
        {
        void RefreshContentSize() {
            var menuWidth = GetAllLeftViewWidth() + GetAllRightViewWidth();
            (viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize(menuWidth + realViewGroup.Frame.Width, 0);
            (viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
@@ -358,28 +340,24 @@
        /// </summary>
        /// <param name="view">View.</param>
        public void AddRightView(Button view)
        {
            if (null == view)
            {
                return;
            }
      {
           if (null == view)
         {
            return;
         }
            var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
            view.X = (int)realViewGroup.Frame.Right + GetAllRightViewWidth();
            view.Y = 0;
            view.Width = mSubViewWidth;
            view.Height = Height;
            viewGroup.AddSubview(view.RealView);
            view.Parent = this;
            view.Refresh();
            rigthView.Add(view);
            view.X =(int)realViewGroup.Frame.Right + GetAllRightViewWidth();
         view.Y = 0;
         view.Width = mSubViewWidth;
         view.Height = Height;
         viewGroup.AddSubview(view.RealView);
         view.Parent = this;
         view.Refresh();
         rigthView.Add(view);
            RefreshContentSize();
            //         (viewGroup as UIScrollView).ContentSize = new CoreGraphics.CGSize((leftView.Count + rigthView.Count) * SubViewWidth + realViewGroup.Frame.Width, 0);
            //(viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), false);
        }
      }
        nfloat beforeXScrollX;
        nfloat moveX;
@@ -387,22 +365,22 @@
        /// 在滑动事件下,可显示隐藏些自定义视图
        /// </summary>
        public RowLayout()
        {
      {
            viewGroup = new UIScrollView { Bounces = false };
            realViewGroup = new MyRowLayout(this) { };
         viewGroup.AddSubview(realViewGroup);
         viewGroup.Layer.MasksToBounds = true;
            viewGroup.AddSubview(realViewGroup);
            viewGroup.Layer.MasksToBounds = true;
            lineUIView.BackgroundColor = new UIColor(0x81 / 255.0f, 0x81 / 255.0f, 0x81 / 255.0f, 0.8f);
            var lineUIViewFrame = lineUIView.Frame;
            lineUIViewFrame.Height = 1.0f;
            lineUIView.Frame = lineUIViewFrame;
            viewGroup.AddSubview(lineUIView);
         lineUIView.BackgroundColor = new UIColor(0x81 / 255.0f, 0x81 / 255.0f, 0x81 / 255.0f, 0.8f);
         var lineUIViewFrame = lineUIView.Frame;
         lineUIViewFrame.Height = 1.0f;
         lineUIView.Frame = lineUIViewFrame;
         viewGroup.AddSubview(lineUIView);
            (viewGroup as UIScrollView).ShowsHorizontalScrollIndicator = false;//隐藏水平滚动条
            (viewGroup as UIScrollView).Scrolled += (s, e) =>
            {
                moveX = (viewGroup as UIScrollView).ContentOffset.X - beforeXScrollX;
@@ -413,14 +391,14 @@
                beforeXScrollX = (viewGroup as UIScrollView).ContentOffset.X;
            };
            (viewGroup as UIScrollView).DecelerationStarted += (s, e) =>
            (viewGroup as UIScrollView). DecelerationStarted += (s, e) =>
            {
                GetMovePageIndex();
            };
            (viewGroup as UIScrollView).DraggingEnded += (s, e) =>
            {
@@ -432,8 +410,7 @@
        }
        void GetMovePageIndex()
        {
        void GetMovePageIndex(){
            if (20 < Math.Abs(moveX))
            {