using System;
|
using HDL_ON.UI.Music;
|
using Shared;
|
using System.Collections.Generic;
|
|
namespace HDL_ON.UI.UI2.FuntionControlView.Aks.CommonView
|
{
|
/// <summary>
|
/// 自定义圆角容器
|
/// </summary>
|
public class CornerFramLayout : BaseFramLayout
|
{
|
private int topMargin;
|
private int leftMargin;
|
private int bottomMargin;
|
private int rightMargin;
|
/// <summary>
|
/// 一行几个元素
|
/// </summary>
|
private int mRowNumber;
|
|
private List<string> mList;
|
|
public Action<string> selectAction = null;
|
/// <summary>
|
/// 当前选择的索引(内部使用)
|
/// </summary>
|
private int CurrnetSelectIndex = -1;
|
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="width">容器宽度</param>
|
/// <param name="height">容器高度</param>
|
///<param name="rowNumber">一行几个元素</param>
|
///<param name="rowNumber">圆角值</param>
|
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;
|
|
|
}
|
/// <summary>
|
/// 设置内边距
|
/// </summary>
|
/// <param name="top">上边距</param>
|
/// <param name="bottom">下边距</param>
|
/// <param name="left">左边距</param>
|
/// <param name="right">右边距</param>
|
public void SetMargin(int top, int bottom, int left, int right)
|
{
|
this.topMargin = top;
|
this.bottomMargin = bottom;
|
this.leftMargin = left;
|
this.rightMargin = right;
|
}
|
|
/// <summary>
|
/// 设置列表数据(请在初始化完成之前调用)
|
/// </summary>
|
/// <param name="list"></param>
|
public void SetList(List<string> list)
|
{
|
if (list == null)
|
{
|
list = new List<string>();
|
}
|
this.mList = list;
|
}
|
|
/// <summary>
|
/// 获取测试列表数据
|
/// </summary>
|
public List<string> GetTestList(int count)
|
{
|
var list = new List<string>();
|
for (int i = 1; i <= count; i++)
|
{
|
if (i % 2 == 0)
|
{
|
list.Add("你好傻哦!");
|
}
|
else
|
{
|
list.Add("真的是这样的吗?");
|
}
|
}
|
return list;
|
}
|
|
/// <summary>
|
/// 动态加载按键界面
|
/// (注意:mRowNumber!=0)
|
/// </summary>
|
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);
|
//}
|
|
|
}
|
}
|
|
/// <summary>
|
/// 动态加载按键界面
|
/// </summary>
|
/// <param name="list">索引列表,表示某一条宽度加宽</param>
|
public void LoadButtonPage(List<int> 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);
|
//}
|
}
|
}
|
|
|
/// <summary>
|
/// 动态加载图片界面
|
/// </summary>
|
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);
|
//}
|
|
|
}
|
}
|
/// <summary>
|
/// 设置初始选择(请在初始化完成之前调用)
|
/// </summary>
|
/// <param name="index">从列表0开始计算第一个元素,设置超过列表最大(new List().count-1)值视为无效</param>
|
public void SetIndex(int index = -1)
|
{
|
if (index == -1) { return; }
|
this.CurrnetSelectIndex = index;
|
|
}
|
/// <summary>
|
/// 最后一行
|
/// </summary>
|
/// <param name="index">当前索引值</param>
|
/// <returns></returns>
|
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;
|
|
}
|
/// <summary>
|
/// 最后右边那一个
|
/// </summary>
|
/// <param name="value"></param>
|
/// <returns></returns>
|
private bool IsLastRight(int value)
|
{
|
if (value % this.mRowNumber == 0)
|
{
|
return true;
|
};
|
return false;
|
}
|
|
|
/// <summary>
|
/// 重新计算button宽度
|
/// </summary>
|
/// <param name="button">控件</param>
|
/// <param name="widthMax">宽度最大最</param>
|
/// <param name="padding">内边距</param>
|
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;
|
}
|
}
|
}
|