using Shared.Phone.UserCenter;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.MainPage.Controls
|
{
|
/// <summary>
|
/// 场景卡片控件
|
/// </summary>
|
public class SceneCardControl : FrameLayoutStatuControl
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 卡片需要被移除的事件
|
/// </summary>
|
public Action CardNeedRemoveEvent = null;
|
/// <summary>
|
/// 场景图片控件
|
/// </summary>
|
private ImageView btnScenePic = null;
|
/// <summary>
|
/// 场景背景图控件
|
/// </summary>
|
private PicViewControl btnSceneBackGroud = null;
|
/// <summary>
|
/// 时间图标控件
|
/// </summary>
|
private IconViewControl btnTimeIcon = null;
|
/// <summary>
|
/// 延时时间显示控件
|
/// </summary>
|
private NormalViewControl btnTimeView = null;
|
/// <summary>
|
/// 场景名字控件
|
/// </summary>
|
private NormalViewControl btnSceneName = null;
|
/// <summary>
|
/// 场景ID
|
/// </summary>
|
private int SceneId = 0;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 场景卡片控件(宽度:458 + 14 * 2 高度:305 + 43)
|
/// </summary>
|
public SceneCardControl()
|
{
|
//图片真实宽度+图片自身左右空白
|
this.Width = HdlControlLogic.Current.GetPictrueRealSize(458 + 14 * 2);
|
//图片高度+阴影
|
this.Height = HdlControlLogic.Current.GetPictrueRealSize(305 + 43);
|
//取消点击特效
|
this.UseClickStatu = false;
|
|
this.ButtonClickEvent += (sender, e) =>
|
{
|
//调用场景
|
this.SetSceneAction();
|
};
|
}
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
/// <param name="i_scene">场景对象</param>
|
public void InitControl(Common.SceneUI i_scene)
|
{
|
this.SceneId = i_scene.Id;
|
string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
|
string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
|
string secondText = Language.StringByID(R.MyInternationalizationString.Second);
|
|
//场景图片控件
|
this.btnScenePic = new ImageView();
|
btnScenePic.X = HdlControlLogic.Current.GetPictrueRealSize(14);
|
btnScenePic.Width = HdlControlLogic.Current.GetPictrueRealSize(458);
|
btnScenePic.Height = HdlControlLogic.Current.GetPictrueRealSize(305);
|
btnScenePic.Radius = (uint)Application.GetRealHeight(17);
|
this.AddChidren(btnScenePic, ChidrenBindMode.NotBind);
|
|
//场景背景图控件
|
this.btnSceneBackGroud = new PicViewControl(this.Width, this.Height, false);
|
btnSceneBackGroud.UnSelectedImagePath = "Scene/Background.png";
|
this.AddChidren(btnSceneBackGroud, ChidrenBindMode.BindEvent);
|
|
//延时时间显示控件
|
this.btnTimeView = new NormalViewControl(HdlControlLogic.Current.GetPictrueRealSize(280), HdlControlLogic.Current.GetPictrueRealSize(63), false);
|
btnTimeView.X = HdlControlLogic.Current.GetPictrueRealSize(37);
|
btnTimeView.Y = HdlControlLogic.Current.GetPictrueRealSize(10);
|
btnTimeView.TextColor = 0xffffb400;
|
btnTimeView.IsBold = true;
|
if (i_scene.SceneDelayTime > 0)
|
{
|
btnTimeView.Text= this.GetTimeString(i_scene.SceneDelayTime, hourText, minuText, secondText);
|
}
|
this.AddChidren(btnTimeView, ChidrenBindMode.BindEvent);
|
|
//时间图标控件
|
this.btnTimeIcon = new IconViewControl(63);
|
btnTimeIcon.X = HdlControlLogic.Current.GetPictrueRealSize(37);
|
btnTimeIcon.Y = HdlControlLogic.Current.GetPictrueRealSize(20);
|
btnTimeIcon.UnSelectedImagePath = "Item/Time.png";
|
this.AddChidren(btnTimeIcon, ChidrenBindMode.NotBind);
|
if (i_scene.SceneDelayTime > 0)
|
{
|
btnTimeIcon.Visible = false;
|
}
|
btnTimeIcon.ButtonClickEvent += (sender, e) =>
|
{
|
if (i_scene.RemainTime > 0)
|
{
|
//该场景正在延时,请稍后
|
var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
|
msgContr.Show();
|
return;
|
}
|
var timeSelect = new Device.CommonForm.SelectTime();
|
Common.CommonPage.Instance.AddChidren(timeSelect);
|
timeSelect.TempTime = i_scene.SceneDelayTime;
|
timeSelect.Init();
|
timeSelect.TimeAction = (time) =>
|
{
|
i_scene.SceneDelayTime = time;
|
|
//时间图标不显示
|
this.btnTimeIcon.Visible = false;
|
//显示剩余的时间
|
this.btnTimeView.Text = this.GetTimeString(time, hourText, minuText, secondText);
|
};
|
};
|
|
//收藏控件
|
var btnCollect = new IconViewControl(107);
|
btnCollect.X = HdlControlLogic.Current.GetPictrueRealSize(350);
|
btnCollect.Y = HdlControlLogic.Current.GetPictrueRealSize(12);
|
btnCollect.UnSelectedImagePath = "Item/Collection1.png";
|
btnCollect.SelectedImagePath = "Item/CollectionSelected1.png";
|
this.AddChidren(btnCollect, ChidrenBindMode.NotBind);
|
btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_scene);
|
btnCollect.ButtonClickEvent += (sender, e) =>
|
{
|
//状态取反
|
btnCollect.IsSelected = !btnCollect.IsSelected;
|
if (btnCollect.IsSelected == false)
|
{
|
//取消收藏
|
HdlSceneLogic.Current.DeleteLoveScene(i_scene);
|
if (HdlRoomLogic.Current.NowMainPageRoom.IsLove == true)
|
{
|
//如果当前房间是我的喜爱的话,回调卡片被删除的事件
|
this.CardNeedRemoveEvent?.Invoke();
|
}
|
}
|
else
|
{
|
//添加收藏
|
HdlSceneLogic.Current.AddLoveScene(i_scene);
|
}
|
};
|
|
//场景名称控件
|
this.btnSceneName = new NormalViewControl(HdlControlLogic.Current.GetPictrueRealSize(280), HdlControlLogic.Current.GetPictrueRealSize(63), false);
|
btnSceneName.X = HdlControlLogic.Current.GetPictrueRealSize(37);
|
btnSceneName.Y = HdlControlLogic.Current.GetPictrueRealSize(236);
|
btnSceneName.IsBold = true;
|
btnSceneName.TextColor = UserCenterColor.Current.White;
|
this.AddChidren(btnSceneName, ChidrenBindMode.BindEvent);
|
|
//刷新控件状态
|
this.RefreshControlInfo(i_scene);
|
}
|
|
#endregion
|
|
#region ■ 调用场景___________________________
|
|
/// <summary>
|
/// 调用场景
|
/// </summary>
|
private async void SetSceneAction()
|
{
|
//这个场景不见的情况应该不可能
|
var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(this.SceneId);
|
if (scene.SceneDelayTime <= 0 && scene.RemainTime <= 0)
|
{
|
//如果没有延迟的话,直接开启Loading特效
|
this.StartLoadingApreal();
|
}
|
//执行调用场景
|
var result = await HdlSceneLogic.Current.ControlScene(scene);
|
if (result == false)
|
{
|
return;
|
}
|
//修改时间
|
scene.RemainTime = scene.SceneDelayTime;
|
scene.SceneDelayTime = 0;
|
//开启延时倒计时特效
|
this.StartRemainTimeApreal(scene);
|
}
|
|
#endregion
|
|
#region ■ 刷新控件状态_______________________
|
|
/// <summary>
|
/// 刷新控件状态
|
/// </summary>
|
/// <param name="i_scene">场景对象</param>
|
public void RefreshControlInfo(Common.SceneUI i_scene)
|
{
|
//场景名称必须刷新
|
this.btnSceneName.Text = i_scene.Name;
|
//刷新图片
|
if (i_scene.IconPathType == 0)
|
{
|
//主页的场景卡片用的是另外的图
|
string newPath = i_scene.IconPath.Replace("SceneIcon", "SceneCardIcon");
|
if (this.btnScenePic.ImagePath != newPath)
|
{
|
this.btnScenePic.ImagePath = newPath;
|
}
|
}
|
else
|
{
|
string fullPath = System.IO.Path.Combine(Common.Config.Instance.FullPath, i_scene.IconPath);
|
if (this.btnScenePic.ImagePath != fullPath)
|
{
|
this.btnScenePic.ImagePath = fullPath;
|
}
|
}
|
|
//开启延时倒计时特效
|
this.StartRemainTimeApreal(i_scene);
|
}
|
|
#endregion
|
|
#region ■ 延时倒计时特效_____________________
|
|
/// <summary>
|
/// 开启延时倒计时特效
|
/// </summary>
|
/// <param name="i_scene"></param>
|
private void StartRemainTimeApreal(Common.SceneUI i_scene)
|
{
|
if (i_scene.RemainTime <= 0)
|
{
|
return;
|
}
|
int remainTine = i_scene.RemainTime;
|
string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
|
string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
|
string secondText = Language.StringByID(R.MyInternationalizationString.Second);
|
|
//时间图标不显示
|
this.btnTimeIcon.Visible = false;
|
//显示剩余的时间
|
this.btnTimeView.Text = this.GetTimeString(i_scene.RemainTime, hourText, minuText, secondText);
|
|
//开启内部延时时间线程(旨在全部地方的同一场景时间同步)
|
HdlSceneLogic.Current.StartDelayTimeThread(i_scene);
|
|
new System.Threading.Thread(() =>
|
{
|
while (remainTine > 0 && this.Parent != null)
|
{
|
System.Threading.Thread.Sleep(1000);
|
Application.RunOnMainThread(() =>
|
{
|
this.btnTimeView.Text = this.GetTimeString(remainTine, hourText, minuText, secondText);
|
});
|
remainTine--;
|
}
|
Application.RunOnMainThread(() =>
|
{
|
//倒计时结束时,时间图标显示
|
this.btnTimeIcon.Visible = true;
|
this.btnTimeView.Text = string.Empty;
|
//直接开启Loading特效
|
this.StartLoadingApreal();
|
});
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
#endregion
|
|
#region ■ Loading特效________________________
|
|
/// <summary>
|
/// 开启Loading特效
|
/// </summary>
|
private void StartLoadingApreal()
|
{
|
//弄个遮罩遮住
|
var frameBack = new FrameLayout();
|
frameBack.BackgroundImagePath = "Scene/SceneActionGroud.png";
|
this.AddChidren(frameBack);
|
//再加个转圈的
|
var loadContr = new MyProgressLoading();
|
loadContr.LoadingBackgroundColor = UserCenterColor.Current.Transparent;
|
frameBack.AddChidren(loadContr);
|
loadContr.StartLoading(1000);
|
loadContr.DisponeEvent += () =>
|
{
|
frameBack.RemoveFromParent();
|
};
|
}
|
|
#endregion
|
|
#region ■ 控件摧毁___________________________
|
|
/// <summary>
|
/// 控件摧毁
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
this.CardNeedRemoveEvent = null;
|
|
base.RemoveFromParent();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取时间的翻译文本
|
/// </summary>
|
/// <param name="second"></param>
|
/// <param name="hourText">小时的文本</param>
|
/// <param name="minuText">分的文本</param>
|
/// <param name="secondText">秒的文本</param>
|
/// <returns></returns>
|
private string GetTimeString(int second, string hourText, string minuText, string secondText)
|
{
|
string timeStr = string.Empty;
|
int hour = second / 3600;
|
int minu = second % 3600 / 60;
|
int sec = second % 60;
|
if (hour > 0)
|
{
|
timeStr += hour + hourText;
|
}
|
if (minu > 0)
|
{
|
timeStr += minu + minuText;
|
}
|
if (sec > 0)
|
{
|
timeStr += sec + secondText;
|
}
|
return timeStr;
|
}
|
|
#endregion
|
|
#region ■ 自定义控件_________________________
|
|
/// <summary>
|
/// 自定义控件(需要的它移除事件)
|
/// </summary>
|
private class MyProgressLoading : ProgressLoading
|
{
|
/// <summary>
|
/// 控件销毁的事件
|
/// </summary>
|
public Action DisponeEvent = null;
|
/// <summary>
|
/// 控件销毁
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
base.RemoveFromParent();
|
|
this.DisponeEvent?.Invoke();
|
this.DisponeEvent = null;
|
}
|
}
|
|
#endregion
|
}
|
}
|