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.
87 lines
2.9 KiB
87 lines
2.9 KiB
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using EnhancedUI.EnhancedScroller;
|
|
using System.Collections;
|
|
#if UNITY_2017_4_OR_NEWER
|
|
using UnityEngine.Networking;
|
|
#endif
|
|
|
|
namespace EnhancedScrollerDemos.RemoteResourcesDemo
|
|
{
|
|
public class CellView : EnhancedScrollerCellView
|
|
{
|
|
public Image cellImage;
|
|
public Sprite defaultSprite;
|
|
|
|
private Coroutine _loadImageCoroutine;
|
|
|
|
public void SetData(Data data)
|
|
{
|
|
_loadImageCoroutine = StartCoroutine(LoadRemoteImage(data));
|
|
}
|
|
|
|
public IEnumerator LoadRemoteImage(Data data)
|
|
{
|
|
string path = data.imageUrl;
|
|
|
|
Texture2D texture = null;
|
|
|
|
// Get the remote texture
|
|
|
|
#if UNITY_2020_1_OR_NEWER
|
|
var webRequest = UnityWebRequestTexture.GetTexture(path);
|
|
yield return webRequest.SendWebRequest();
|
|
if (webRequest.result != UnityWebRequest.Result.Success)
|
|
{
|
|
Debug.LogError("Failed to download image [" + path + "]: " + webRequest.error);
|
|
}
|
|
else
|
|
{
|
|
texture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;
|
|
}
|
|
#else
|
|
#if UNITY_2017_4_OR_NEWER
|
|
var webRequest = UnityWebRequestTexture.GetTexture(path);
|
|
yield return webRequest.SendWebRequest();
|
|
if (webRequest.isNetworkError || webRequest.isHttpError)
|
|
{
|
|
Debug.LogError("Failed to download image [" + path + "]: " + webRequest.error);
|
|
}
|
|
else
|
|
{
|
|
texture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;
|
|
}
|
|
#else
|
|
WWW www = new WWW(path);
|
|
yield return www;
|
|
texture = www.texture;
|
|
#endif
|
|
#endif
|
|
|
|
if (texture != null)
|
|
{
|
|
cellImage.sprite = Sprite.Create(texture, new Rect(0, 0, data.imageDimensions.x, data.imageDimensions.y), new Vector2(0, 0), data.imageDimensions.x);
|
|
}
|
|
else
|
|
{
|
|
ClearImage();
|
|
}
|
|
}
|
|
|
|
public void ClearImage()
|
|
{
|
|
cellImage.sprite = defaultSprite;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Stop the coroutine if the cell is going to be recycled
|
|
/// </summary>
|
|
public void WillRecycle()
|
|
{
|
|
if (_loadImageCoroutine != null)
|
|
{
|
|
StopCoroutine(_loadImageCoroutine);
|
|
}
|
|
}
|
|
}
|
|
}
|