天津23维预案
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

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;
}
}
}