Exemple #1
0
            /// <summary> Called when a cell becomes visible </summary>
            /// <param name="viewHolder"> use viewHolder.itemIndex to find your corresponding model and feed data into its views</param>
            protected override void UpdateCellViewsHolder(MyCellViewsHolder viewHolder)
            {
                var model = _Data[viewHolder.itemIndex];

                viewHolder.icon.enabled = false;
                viewHolder.title.text   = "Loading";
                int itemIdexAtRequest = viewHolder.itemIndex;

                string requestedPath = model.imageURL;
                var    request       = new SimpleImageDownloader.Request()
                {
                    url    = requestedPath,
                    onDone = result =>
                    {
                        if (IsModelStillValid(viewHolder.itemIndex, itemIdexAtRequest, requestedPath))
                        {
                            viewHolder.title.text   = model.title;
                            viewHolder.icon.enabled = true;
                            //viewHolder.loadingProgress.fillAmount = 0f;
                            if (viewHolder.icon.texture)
                            {
                                var as2D = viewHolder.icon.texture as Texture2D;
                                if (as2D)
                                {
                                    result.LoadTextureInto(as2D); // re-use Texture2D object

                                    return;
                                }

                                Destroy(viewHolder.icon.texture); // texture type incompatible => destroy it
                            }

                            viewHolder.icon.texture = result.CreateTextureFromReceivedData();
                        }
                    },
                    onError = () =>
                    {
                        if (IsModelStillValid(viewHolder.itemIndex, itemIdexAtRequest, requestedPath))
                        {
                            viewHolder.title.text = "No connection";
                        }
                    }
                };

                SimpleImageDownloader.Instance.Enqueue(request);
            }
        /// <summary>Starts the loading, setting the current image to <see cref="_LoadingTexture"/>, if available. If the image is already in cache, and <paramref name="loadCachedIfAvailable"/>==true, will load that instead</summary>
        public void Load(string imageURL, bool loadCachedIfAvailable = true, Action <bool, bool> onCompleted = null, Action onCanceled = null)
        {
            // Don't download the same image again
            if (loadCachedIfAvailable && _CurrentRequestedURL == imageURL)
            {
                if (_RecycledTexture)
                {
                    if (_RecycledTexture != _RawImage.texture)
                    {
                        _RawImage.texture = _RecycledTexture;
                    }

                    if (onCompleted != null)
                    {
                        onCompleted(true, true);
                    }

                    return;
                }
            }

            if (_RawImage.texture)
            {
                _RecycledTexture = _RawImage.texture as Texture2D;
                if (_RecycledTexture == _LoadingTexture || _RecycledTexture == _ErrorTexture)
                {
                    _RecycledTexture = null;
                }
            }
            else
            {
                _RecycledTexture = null;
            }

            _CurrentRequestedURL = imageURL;
            _RawImage.texture    = _LoadingTexture;
            var request = new SimpleImageDownloader.Request()
            {
                url    = imageURL,
                onDone = result =>
                {
                    if (!_DestroyPending && imageURL == _CurrentRequestedURL) // this will be false if a new request was done during downloading, case in which the result will be ignored
                    {
                        Texture2D texToUse;
                        if (_RecycledTexture)
                        {
                            result.LoadTextureInto(_RecycledTexture);
                            texToUse = _RecycledTexture;
                        }
                        else
                        {
                            texToUse = result.CreateTextureFromReceivedData();
                        }

                        _RawImage.texture = texToUse;

                        if (onCompleted != null)
                        {
                            onCompleted(false, true);
                        }
                    }
                    else if (onCanceled != null)
                    {
                        onCanceled();
                    }
                },
                onError = () =>
                {
                    if (!_DestroyPending && imageURL == _CurrentRequestedURL)                     // this will be false if a new request was done during downloading, case in which the result will be ignored
                    {
                        _RawImage.texture = _ErrorTexture;

                        if (onCompleted != null)
                        {
                            onCompleted(false, false);
                        }
                    }
                    else if (onCanceled != null)
                    {
                        onCanceled();
                    }
                }
            };

            SimpleImageDownloader.Instance.Enqueue(request);
        }