From af4101b1d8461331bc3163b738fc75d4bf67c85c Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 28 七月 2020 17:47:44 +0800
Subject: [PATCH] 2020-07-28-1
---
Shared.IOS/UI/RowLayout.cs | 323 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 299 insertions(+), 24 deletions(-)
diff --git a/Shared.IOS/UI/RowLayout.cs b/Shared.IOS/UI/RowLayout.cs
index 7217085..558a638 100644
--- a/Shared.IOS/UI/RowLayout.cs
+++ b/Shared.IOS/UI/RowLayout.cs
@@ -11,14 +11,23 @@
/// </summary>
public class RowLayout : ViewGroup
{
- /// <summary>
- /// 鍙宠竟鐨勮鍥惧垪琛�
- /// </summary>
- internal System.Collections.Generic.List<Button> leftView = new System.Collections.Generic.List<Button>();
+ /// <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>
/// 閲嶆柊鍒锋柊鎺т欢
@@ -26,6 +35,7 @@
public override void Refresh()
{
base.Refresh();
+ LineColor = lineColor;
}
/// <summary>
/// 鎺т欢瀹藉害
@@ -36,12 +46,16 @@
{
return base.Width;
}
- set
- {
- base.Width = value;
- if (!IsCanRefresh)
- return;
- }
+ set
+ {
+ base.Width = value;
+ if (!IsCanRefresh)
+ return;
+
+ var frame4 = lineUIView.Frame;
+ frame4.Width = base.Width;
+ lineUIView.Frame = frame4;
+ }
}
/// <summary>
@@ -70,37 +84,243 @@
frame.Height = Height;
realViewGroup.Frame = frame;
}
+
+ var frame4 = lineUIView.Frame;
+ frame4.Y = base.Height - frame4.Height;
+ lineUIView.Frame = frame4;
}
}
+ uint lineColor = 0x80818181;
/// <summary>
- /// 澧炲姞宸﹁竟瑙嗗浘
+ /// 鑳屾櫙棰滆壊
/// </summary>
- /// <param name="view">View.</param>
- public void AddLeftView(Button view)
+ /// <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), true);
+ 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), true);
+ 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;
}
- view.X = leftView.Count * SubViewWidth;
+
+ var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
+
+ view.X = GetAllLeftViewWidth();
view.Y = 0;
- view.Width = SubViewWidth;
+ view.Width = mSubViewWidth;
view.Height = Height;
viewGroup.AddSubview(view.RealView);
view.Parent = this;
view.Refresh();
leftView.Add(view);
var frame = realViewGroup.Frame;
- frame.X += SubViewWidth;
+ frame.X += mSubViewWidth;
realViewGroup.Frame = frame;
foreach (var right in rigthView)
{
- right.X += SubViewWidth;
+ right.X += mSubViewWidth;
}
- (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);
+
+ 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);
+ }
internal override void removeChildParent()
{
@@ -125,20 +345,22 @@
{
return;
}
- view.X =(int)realViewGroup.Frame.Right+ rigthView.Count * SubViewWidth;
+ var mSubViewWidth = isUseSameSubViewWidth ? SubViewWidth : view.Width;
+
+ view.X =(int)realViewGroup.Frame.Right + GetAllRightViewWidth();
view.Y = 0;
- view.Width = SubViewWidth;
+ view.Width = mSubViewWidth;
view.Height = Height;
viewGroup.AddSubview(view.RealView);
view.Parent = this;
view.Refresh();
rigthView.Add(view);
- (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);
-
+ RefreshContentSize();
}
+ nfloat beforeXScrollX;
+ nfloat moveX;
/// <summary>
/// 鍦ㄦ粦鍔ㄤ簨浠朵笅锛屽彲鏄剧ず闅愯棌浜涜嚜瀹氫箟瑙嗗浘
/// </summary>
@@ -150,9 +372,62 @@
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