You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.2 KiB
118 lines
2.2 KiB
using UnityEngine; |
|
using UnityEngine.UI; |
|
using UIWidgets; |
|
using System.Collections.Generic; |
|
using System.Collections; |
|
|
|
namespace UIWidgetsSamples { |
|
public class ListViewImagesComponent : ListViewItem { |
|
[SerializeField] |
|
public Text Url; |
|
|
|
[SerializeField] |
|
public RawImage Image; |
|
|
|
[SerializeField] |
|
protected LayoutElement ImageLayoutElement; |
|
|
|
protected ListViewImagesItem Item; |
|
|
|
protected static Dictionary<string,Texture2D> Cache = new Dictionary<string, Texture2D>(); |
|
|
|
protected bool IsLoading; |
|
|
|
protected IEnumerator loadCorutine; |
|
|
|
protected override void OnEnable() |
|
{ |
|
base.OnEnable(); |
|
if (IsLoading) |
|
{ |
|
return; |
|
} |
|
if ((Image.texture==null) && (Item!=null) && (Item.Url!="")) |
|
{ |
|
loadCorutine = Load(); |
|
StartCoroutine(loadCorutine); |
|
} |
|
} |
|
|
|
protected override void OnDisable() |
|
{ |
|
base.OnDisable(); |
|
if (IsLoading) |
|
{ |
|
IsLoading = false; |
|
StopCoroutine(loadCorutine); |
|
} |
|
} |
|
|
|
// Displaying item data |
|
public void SetData(ListViewImagesItem item) |
|
{ |
|
// save item so later can fix item.Height to actual value |
|
Item = item; |
|
|
|
Url.text = (Item.Url!="") ? Item.Url : "No image"; |
|
|
|
if (Cache.ContainsKey(Item.Url)) |
|
{ |
|
SetImage(); |
|
} |
|
else |
|
{ |
|
// reset images parameter |
|
Image.texture = null; |
|
ImageLayoutElement.preferredHeight = -1; |
|
ImageLayoutElement.preferredWidth = -1; |
|
|
|
if ((Item.Url!="") && (Item.Url!=null)) |
|
{ |
|
Image.color = Color.white; |
|
ImageLayoutElement.minHeight = 100; |
|
ImageLayoutElement.minWidth = 100; |
|
|
|
loadCorutine = Load(); |
|
StartCoroutine(loadCorutine); |
|
} |
|
else |
|
{ |
|
Image.color = Color.clear; |
|
ImageLayoutElement.minHeight = -1; |
|
ImageLayoutElement.minWidth = -1; |
|
} |
|
} |
|
} |
|
|
|
void SetImage() |
|
{ |
|
Image.color = Color.white; |
|
Image.texture = Cache[Item.Url]; |
|
ImageLayoutElement.preferredHeight = Cache[Item.Url].height; |
|
ImageLayoutElement.preferredWidth = Cache[Item.Url].width; |
|
} |
|
|
|
IEnumerator Load() |
|
{ |
|
IsLoading = true; |
|
|
|
var url = Item.Url; |
|
|
|
yield return null; |
|
|
|
var www = new WWW(url); |
|
|
|
yield return www; |
|
if (!Cache.ContainsKey(url)) |
|
{ |
|
Cache.Add(url, www.texture); |
|
} |
|
if (Cache.ContainsKey(Item.Url)) |
|
{ |
|
SetImage(); |
|
} |
|
|
|
IsLoading = false; |
|
} |
|
} |
|
} |