using System; using HDL_ON.UI.Music; using Shared; using System.Collections.Generic; namespace HDL_ON.UI.UI2.FuntionControlView.Aks.CommonView { /// /// 自定义圆角容器 /// public class CornerFramLayout : BaseFramLayout { private int topMargin; private int leftMargin; private int bottomMargin; private int rightMargin; /// /// 一行几个元素 /// private int mRowNumber; private List mList; public Action selectAction = null; /// /// 当前选择的索引(内部使用) /// private int CurrnetSelectIndex = -1; /// /// /// /// 容器宽度 /// 容器高度 ///一行几个元素 ///圆角值 public CornerFramLayout(int width, int height, int rowNumber = 0, int radius = 0) { this.BackgroundColor = MusicColor.WhiteColor; this.Width = Application.GetRealWidth(width); this.Height = Application.GetRealHeight(height); this.Radius = (uint)Application.GetRealHeight(radius); this.mRowNumber = rowNumber; } /// /// 设置内边距 /// /// 上边距 /// 下边距 /// 左边距 /// 右边距 public void SetMargin(int top, int bottom, int left, int right) { this.topMargin = top; this.bottomMargin = bottom; this.leftMargin = left; this.rightMargin = right; } /// /// 设置列表数据(请在初始化完成之前调用) /// /// public void SetList(List list) { if (list == null) { list = new List(); } this.mList = list; } /// /// 获取测试列表数据 /// public List GetTestList(int count) { var list = new List(); for (int i = 1; i <= count; i++) { if (i % 2 == 0) { list.Add("你好傻哦!"); } else { list.Add("真的是这样的吗?"); } } return list; } /// /// 动态加载按键界面 /// (注意:mRowNumber!=0) /// public void LoadButtonPage() { if (this.mRowNumber == 0) { return; } int line = 0; int xCount = 0; for (int i = 1; i <= this.mList.Count; i++) { var d = this.mList[i - 1]; ButtonFramLayout buttonFram = new ButtonFramLayout(); this.AddChidren(buttonFram); buttonFram.Tag = d; buttonFram.Y = Application.GetRealHeight(this.topMargin) + Application.GetRealHeight(ButtonFramLayout.heightFrameLayout * line); buttonFram.X = Application.GetRealWidth(this.leftMargin) + Application.GetRealWidth(ButtonFramLayout.widthFrameLayout * xCount); buttonFram.AddImageView(); buttonFram.AddNameView(); if (!IsLastRight(i)) { buttonFram.AddRightLine(); } if (!IsLastColumn(i)) { buttonFram.AddBottomLine(); } buttonFram.GetNameButton().Text = d; xCount++; if (i % this.mRowNumber == 0) { line++; xCount = 0; } buttonFram.SetClickListener((fl, btnIcon, btnName) => { if (buttonFram.Tag != null) { selectAction?.Invoke(buttonFram.Tag.ToString()); } }); //if (CurrnetSelectIndex != -1 && CurrnetSelectIndex == i) //{ // selectAction?.Invoke((int)buttonFram.Tag); //} } } /// /// 动态加载按键界面 /// /// 索引列表,表示某一条宽度加宽 public void LoadButtonPage(List list) { int currnetheightValue = 0; int currnetWidthValue = 0; //获取相对一个纬度值 int heightDimensionValue = this.Height - Application.GetRealHeight(this.topMargin) - Application.GetRealHeight(this.bottomMargin) - Application.GetRealHeight(ButtonFramLayout.heightFrameLayout / 2); int widthDimensionValue = this.Width - Application.GetRealWidth(this.leftMargin) - Application.GetRealWidth(this.rightMargin) - Application.GetRealHeight(ButtonFramLayout.widthFrameLayout / 2); for (int i = 1; i <= this.mList.Count; i++) { var d = this.mList[i - 1]; ButtonFramLayout buttonFram = null; if (list.Contains(i)) { buttonFram = new ButtonFramLayout(ButtonFramLayout.widthFrameLayout * 2); buttonFram.Y = Application.GetRealHeight(this.topMargin) + Application.GetRealHeight(currnetheightValue); buttonFram.X = Application.GetRealWidth(this.leftMargin) + Application.GetRealWidth(currnetWidthValue); currnetWidthValue += ButtonFramLayout.widthFrameLayout * 2; } else { buttonFram = new ButtonFramLayout(); buttonFram.Y = Application.GetRealHeight(this.topMargin) + Application.GetRealHeight(currnetheightValue); buttonFram.X = Application.GetRealWidth(this.leftMargin) + Application.GetRealWidth(currnetWidthValue); currnetWidthValue += ButtonFramLayout.widthFrameLayout; } this.AddChidren(buttonFram); buttonFram.AddImageView(); buttonFram.AddNameView(); buttonFram.Tag = d;//标记数据 buttonFram.GetNameButton().Text = d.ToString(); if (widthDimensionValue > Application.GetRealWidth(currnetWidthValue)) { //加右线 buttonFram.AddRightLine(); } if (heightDimensionValue > buttonFram.Bottom) { //加底线 buttonFram.AddBottomLine(); } if (widthDimensionValue < Application.GetRealWidth(currnetWidthValue)) { currnetheightValue += ButtonFramLayout.heightFrameLayout; currnetWidthValue = 0; } buttonFram.SetClickListener((fl, btnIcon, btnName) => { if (buttonFram.Tag != null) { selectAction?.Invoke(buttonFram.Tag.ToString()); } }); //if (CurrnetSelectIndex != -1 && CurrnetSelectIndex == i) //{ // selectAction?.Invoke((int)buttonFram.Tag); //} } } /// /// 动态加载图片界面 /// public void LoadImagePage() { if (this.mRowNumber == 0) { return; } int line = 0; int xCount = 0; for (int i = 1; i <= this.mList.Count; i++) { var d = this.mList[i - 1]; ImageFramlayout imageFram = new ImageFramlayout(); imageFram.AddView(this); imageFram.Tag = d; imageFram.Y = Application.GetRealHeight(this.topMargin) + Application.GetRealHeight((ImageFramlayout.heightFrameLayout + 20) * line); imageFram.X = Application.GetRealWidth((ImageFramlayout.widthFrameLayout + 8) * xCount); imageFram.btnName.Text = d; xCount++; if (i % this.mRowNumber == 0) { line++; xCount = 0; } imageFram.SetClickListener((fl) => { if (imageFram.Tag != null) { selectAction?.Invoke(imageFram.Tag.ToString()); } }); //if (CurrnetSelectIndex != -1 && CurrnetSelectIndex == i) //{ // selectAction?.Invoke((int)imageFram.Tag); //} } } /// /// 设置初始选择(请在初始化完成之前调用) /// /// 从列表0开始计算第一个元素,设置超过列表最大(new List().count-1)值视为无效 public void SetIndex(int index = -1) { if (index == -1) { return; } this.CurrnetSelectIndex = index; } /// /// 最后一行 /// /// 当前索引值 /// private bool IsLastColumn(int index) { int lineCount = this.mList.Count / this.mRowNumber;//得出行数 int number = this.mList.Count % this.mRowNumber; if (number != 0) { if (index > lineCount * this.mRowNumber) { return true; } } else { int value = --lineCount * this.mRowNumber; if (index > value) { return true; } } return false; } /// /// 最后右边那一个 /// /// /// private bool IsLastRight(int value) { if (value % this.mRowNumber == 0) { return true; }; return false; } /// /// 重新计算button宽度 /// /// 控件 /// 宽度最大最 /// 内边距 private void AdjustRealWidth(Button button, int widthMax = 0, int padding = 0) { if (button == null) { return; } int width; if (widthMax == 0) { //内边距 width = button.GetTextWidth() + Application.GetRealWidth(padding * 2); } else { if (button.GetTextWidth() > Application.GetRealWidth(widthMax)) { button.TextSize = 10;//控件高度不变,改变字体大小,准备换行; width = Application.GetRealWidth(widthMax); } else { width = button.GetTextWidth(); } } button.Width = width; } } }