| | |
| | | using UIKit; |
| | | using Shared.IO; |
| | | using Foundation; |
| | | using CoreGraphics; |
| | | |
| | | namespace Shared |
| | | { |
| | | /// <summary> |
| | | /// 位置布局 |
| | | /// </summary> |
| | | public class HorizontalScrolViewLayout:ViewGroup |
| | | { |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | public HorizontalScrolViewLayout() |
| | | { |
| | | viewGroup = new MyHorizontalScrolViewLayout(this) { }; |
| | | realViewGroup = viewGroup; |
| | | /// <summary> |
| | | /// 位置布局 |
| | | /// </summary> |
| | | public class HorizontalScrolViewLayout : ViewGroup |
| | | { |
| | | /// <summary> |
| | | /// 构造函数 |
| | | /// </summary> |
| | | public HorizontalScrolViewLayout() |
| | | { |
| | | viewGroup = new MyHorizontalScrolViewLayout(this) { }; |
| | | realViewGroup = viewGroup; |
| | | HorizontalScrollBarEnabled = false; |
| | | } |
| | | |
| | |
| | | /// <returns>The chidren.</returns> |
| | | /// <param name="view">View.</param> |
| | | public override void AddChidren(View view) |
| | | { |
| | | base.AddChidren(view); |
| | | ReLocation(); |
| | | } |
| | | { |
| | | base.AddChidren(view); |
| | | ReLocation(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 重新排位置及设备内容大小 |
| | | /// </summary> |
| | | public virtual void ReLocation() |
| | | { |
| | | if (0 == viewList.Count) |
| | | { |
| | | return; |
| | | } |
| | | for (int i = 1; i < viewList.Count; i++) |
| | | { |
| | | var frame = viewList[i].RealView.Frame; |
| | | frame.X = viewList[i - 1].RealView.Frame.Right; |
| | | viewList[i].RealView.Frame = frame; |
| | | } |
| | | /// <summary> |
| | | /// 重新排位置及设备内容大小 |
| | | /// </summary> |
| | | public virtual void ReLocation() |
| | | { |
| | | if (0 == viewList.Count) |
| | | { |
| | | return; |
| | | } |
| | | for (int i = 1; i < viewList.Count; i++) |
| | | { |
| | | var frame = viewList[i].RealView.Frame; |
| | | frame.X = viewList[i - 1].RealView.Frame.Right; |
| | | viewList[i].RealView.Frame = frame; |
| | | } |
| | | |
| | | (realViewGroup as MyHorizontalScrolViewLayout).ContentSize = new CoreGraphics.CGSize(viewList[viewList.Count - 1].Right <= Width ? Width + 1 : viewList[viewList.Count - 1].Right,0); |
| | | } |
| | | (realViewGroup as MyHorizontalScrolViewLayout).ContentSize = new CoreGraphics.CGSize(viewList[viewList.Count - 1].Right <= Width ? Width + 1 : viewList[viewList.Count - 1].Right, 0); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 移除所有的视图 |
| | | /// </summary> |
| | | public override void RemoveAll() |
| | | { |
| | | base.RemoveAll(); |
| | | ReLocation (); |
| | | } |
| | | /// <summary> |
| | | /// 移除所有的视图 |
| | | /// </summary> |
| | | public override void RemoveAll() |
| | | { |
| | | base.RemoveAll(); |
| | | ReLocation(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 移除控件 |
| | | /// </summary> |
| | | /// <param name="view">View.</param> |
| | | internal override void Remove(View view) |
| | | { |
| | | base.Remove(view); |
| | | ReLocation (); |
| | | } |
| | | /// <summary> |
| | | /// 移除控件 |
| | | /// </summary> |
| | | /// <param name="view">View.</param> |
| | | internal override void Remove(View view) |
| | | { |
| | | base.Remove(view); |
| | | ReLocation(); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 移除指定索引对象 |
| | | /// </summary> |
| | | /// <param name="index">Index.</param> |
| | | public override void RemoveAt(int index) |
| | | { |
| | | base.RemoveAt(index); |
| | | ReLocation (); |
| | | } |
| | | /// <summary> |
| | | /// 移除指定索引对象 |
| | | /// </summary> |
| | | /// <param name="index">Index.</param> |
| | | public override void RemoveAt(int index) |
| | | { |
| | | base.RemoveAt(index); |
| | | ReLocation(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 是否允许滑动 |
| | | /// </summary> |
| | | /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value> |
| | | public bool ScrollEnabled |
| | | { |
| | | get |
| | | { |
| | | return (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled; |
| | | } |
| | | set |
| | | { |
| | | (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled = value; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 是否允许滑动 |
| | | /// </summary> |
| | | /// <value><c>true</c> if scroll enabled; otherwise, <c>false</c>.</value> |
| | | public bool ScrollEnabled |
| | | { |
| | | get |
| | | { |
| | | return (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled; |
| | | } |
| | | set |
| | | { |
| | | (viewGroup as MyHorizontalScrolViewLayout).ScrollEnabled = value; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 是否正在滑动 |
| | | /// </summary> |
| | | /// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value> |
| | | public bool Decelerating |
| | | { |
| | | get |
| | | { |
| | | return (viewGroup as MyHorizontalScrolViewLayout).Decelerating; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 是否正在滑动 |
| | | /// </summary> |
| | | /// <value><c>true</c> if decelerating; otherwise, <c>false</c>.</value> |
| | | public bool Decelerating |
| | | { |
| | | get |
| | | { |
| | | return (viewGroup as MyHorizontalScrolViewLayout).Decelerating; |
| | | } |
| | | } |
| | | |
| | | /// <summary>
/// 是否显示水平滚动条
/// </summary> |
| | | |
| | |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 滑动到指定位置 |
| | | /// </summary> |
| | | /// <param name="viewX"></param> |
| | | public void ScrollToX(int viewX) |
| | | { |
| | | //计算最大可以滚动的区域 |
| | | var maxX = (realViewGroup as MyHorizontalScrolViewLayout).ContentSize.Width - Width; |
| | | |
| | | if (viewX > maxX) |
| | | { |
| | | viewX = (int)maxX; |
| | | } |
| | | |
| | | if (viewX < 0) |
| | | { |
| | | viewX = 0; |
| | | } |
| | | |
| | | (viewGroup as MyHorizontalScrolViewLayout).SetContentOffset(new CGPoint(viewX, 0), false); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 滑动到指定VIEW |
| | | /// </summary> |
| | | /// <param name="viewIndex"></param> |
| | | public void ScrollToViewIndex(int viewIndex) |
| | | { |
| | | if (viewList.Count == 0) |
| | | return; |
| | | var viewX = this.viewList[viewIndex].X; |
| | | //计算最大可以滚动的区域 |
| | | var maxX = (realViewGroup as MyHorizontalScrolViewLayout).ContentSize.Width - Width; |
| | | |
| | | if (viewX > maxX) |
| | | { |
| | | viewX = (int)maxX; |
| | | } |
| | | |
| | | if (viewX < 0) |
| | | { |
| | | viewX = 0; |
| | | } |
| | | |
| | | (viewGroup as MyHorizontalScrolViewLayout).SetContentOffset(new CGPoint(viewX, 0), false); |
| | | } |
| | | |
| | | } |
| | | |
| | | |