From e29de9af8f507d288a61d9459fb3d1f72976876f Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期一, 18 五月 2020 10:40:08 +0800
Subject: [PATCH] 2020-05-18-1
---
Shared.IOS/UI/RowLayout.cs | 506 ++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 402 insertions(+), 104 deletions(-)
diff --git a/Shared.IOS/UI/RowLayout.cs b/Shared.IOS/UI/RowLayout.cs
index 7217085..252761d 100644
--- a/Shared.IOS/UI/RowLayout.cs
+++ b/Shared.IOS/UI/RowLayout.cs
@@ -6,101 +6,339 @@
namespace Shared
{
- /// <summary>
- /// 鍦ㄦ粦鍔ㄤ簨浠朵笅锛屽彲鏄剧ず闅愯棌浜涜嚜瀹氫箟瑙嗗浘
- /// </summary>
- public class RowLayout : ViewGroup
- {
- /// <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>
+ public class RowLayout : ViewGroup
+ {
+ ///// <summary>
+ ///// OpenLeftMenuAction
+ ///// </summary>
+ //public Action OpenLeftMenuAction;
+ ///// <summary>
+ ///// OpenRightMenuAction
+ ///// </summary>
+ //public Action OpenRightMenuAction;
- /// <summary>
- /// 閲嶆柊鍒锋柊鎺т欢
- /// </summary>
- public override void Refresh()
- {
- base.Refresh();
- }
- /// <summary>
- /// 鎺т欢瀹藉害
- /// </summary>
- public override int Width
- {
- get
- {
- return base.Width;
- }
+ /// <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>
+ /// 涓嬮潰閭h竟寮�
+ /// </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;
+
+ 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;
+ }
- /// <summary>
- /// 澧炲姞宸﹁竟瑙嗗浘
- /// </summary>
- /// <param name="view">View.</param>
- public void AddLeftView(Button view)
- {
- if (null == view)
- {
- return;
- }
- view.X = leftView.Count * SubViewWidth;
- view.Y = 0;
- view.Width = SubViewWidth;
- view.Height = Height;
- viewGroup.AddSubview(view.RealView);
- view.Parent = this;
- view.Refresh();
- leftView.Add(view);
- var frame = realViewGroup.Frame;
- frame.X += SubViewWidth;
- realViewGroup.Frame = frame;
- foreach (var right in rigthView)
- {
- right.X += SubViewWidth;
- }
- (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);
- }
+ 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);
+ }
+ }
+
+ /// <summary>
+ /// 鏄惁姝f墦寮�
+ /// </summary>
+ //public bool IsOpening;
+ public bool IsShowLeft;
+ public bool IsShowRight;
+
+ /// <summary>
+ /// 鍏抽棴鍏朵粬RowLayout 鏄剧ず鐨刅iew
+ /// </summary>
+ private void HideOtherRowLayout()
+ {
+ try
+ {
+ if (this.Parent != null)
+ {
+ foreach (View mView in Parent.viewList)
+ {
+ if (mView is RowLayout && mView != this)
+ {
+
+ if ((mView as RowLayout).IsShowRight || (mView as RowLayout).IsShowLeft)
+ {
+ (mView as RowLayout).HideMenu();
+ }
+ }
+ }
+
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ /// <summary>
+ /// 鍏抽棴鏄剧ず鐨刅iew
+ /// </summary>
+ public void HideMenu()
+ {
+ if (IsShowLeft)
+ {
+ HideLeftMenu();
+ }
+ if (IsShowRight)
+ {
+ HideRightMenu();
+ }
+
+ }
+
+ public void OpenLeftMenu()
+ {
+ HideOtherRowLayout();
+ if (IsShowRight)
+ {
+ HideRightMenu();
+ return;
+ }
+
+ if (leftView.Count == 0)
+ return;
+
+
+ IsShowLeft = true;
+ (viewGroup as UIScrollView).SetContentOffset(new CGPoint(leftView[0].RealView.Frame.X, 0), false);
+ OpenMenuAction?.Invoke();
+ }
+
+ public void HideLeftMenu()
+ {
+ IsShowLeft = false;
+ HideAllMenuView();
+ }
+
+ public void OpenRightMenu()
+ {
+ HideOtherRowLayout();
+ if (IsShowLeft)
+ {
+ HideLeftMenu();
+ return;
+ }
+ if (rigthView.Count == 0)
+ return;
+ IsShowRight = true;
+ var rigthViewX = realViewGroup.Frame.X + GetAllRightViewWidth();
+ (viewGroup as UIScrollView).SetContentOffset(new CGPoint(rigthViewX, 0), false);
+ OpenMenuAction?.Invoke();
+
+ }
+
+ public void HideRightMenu()
+ {
+ IsShowRight = false;
+
+ HideAllMenuView();
+ }
+
+ void RestMenuView()
+ {
+ if (IsShowRight)
+ {
+ OpenRightMenu();
+ }
+ else if (IsShowLeft)
+ {
+ OpenLeftMenu();
+
+ }
+ else
+ {
+ HideAllMenuView();
+ }
+
+ }
+
+ void HideAllMenuView()
+ {
+ (viewGroup as UIScrollView).SetContentOffset(new CGPoint(realViewGroup.Frame.X, 0), true);
+ }
+
+ /// <summary>
+ /// 鏄惁浣跨敤鍚屾牱鐨凷ubViewWidth瀹�
+ /// </summary>
+ bool isUseSameSubViewWidth = true;
+ public bool IsUseSameSubViewWidth
+ {
+ get
+ {
+ return isUseSameSubViewWidth;
+
+ }
+ set
+ {
+ isUseSameSubViewWidth = value;
+ }
+
+ }
+
+ /// <summary>
+ /// 鑾峰彇褰撳墠leftView鐨勬�诲
+ /// </summary>
+ /// <returns></returns>
+ int GetAllLeftViewWidth()
+ {
+ int mWidth = 0;
+ foreach (var mView in leftView)
+ {
+ mWidth += mView.Width;
+ }
+ return mWidth;
+ }
+
+ /// <summary>
+ /// 鑾峰彇褰撳墠rigthView鐨勬�诲
+ /// </summary>
+ /// <returns></returns>
+ int GetAllRightViewWidth()
+ {
+ int mWidth = 0;
+ foreach (var mView in rigthView)
+ {
+ mWidth += mView.Width;
+ }
+ return mWidth;
+ }
+
+
+ /// <summary>
+ /// 澧炲姞宸﹁竟瑙嗗浘
+ /// </summary>
+ /// <param name="view">View.</param>
+ public void AddLeftView(Button view)
+ {
+ 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;
+ }
+
+ 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()
+ {
+ 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);
+ }
internal override void removeChildParent()
{
@@ -120,39 +358,99 @@
/// </summary>
/// <param name="view">View.</param>
public void AddRightView(Button view)
- {
- if (null == view)
- {
- return;
- }
- view.X =(int)realViewGroup.Frame.Right+ rigthView.Count * SubViewWidth;
- view.Y = 0;
- view.Width = SubViewWidth;
- view.Height = Height;
- viewGroup.AddSubview(view.RealView);
- view.Parent = this;
- view.Refresh();
- rigthView.Add(view);
+ {
+ if (null == view)
+ {
+ return;
+ }
+ var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
- (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);
+ 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;
/// <summary>
/// 鍦ㄦ粦鍔ㄤ簨浠朵笅锛屽彲鏄剧ず闅愯棌浜涜嚜瀹氫箟瑙嗗浘
/// </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);
(viewGroup as UIScrollView).ShowsHorizontalScrollIndicator = false;//闅愯棌姘村钩婊氬姩鏉�
+
+
+ (viewGroup as UIScrollView).Scrolled += (s, e) =>
+ {
+ moveX = (viewGroup as UIScrollView).ContentOffset.X - beforeXScrollX;
+ };
+
+ (viewGroup as UIScrollView).DraggingStarted += (sender, e) =>
+ {
+ beforeXScrollX = (viewGroup as UIScrollView).ContentOffset.X;
+ };
+
+ (viewGroup as UIScrollView).DecelerationStarted += (s, e) =>
+ {
+
+ GetMovePageIndex();
+
+ };
+
+
+
+ (viewGroup as UIScrollView).DraggingEnded += (s, e) =>
+ {
+ if (!e.Decelerate)
+ {
+ GetMovePageIndex();
+ }
+ };
+
}
+ void GetMovePageIndex()
+ {
+
+ if (20 < Math.Abs(moveX))
+ {
+ if (moveX < 0)
+ {
+ OpenLeftMenu();
+ }
+ else if (moveX > 0)
+ {
+ OpenRightMenu();
+ }
+ }
+ else
+ {
+ RestMenuView();
+ }
+ }
/// <summary>
--
Gitblit v1.8.0