赞
踩
实现类似排行版、社交模块的头像下载与管理的封装,使用者只需要对控件进行图片网络地址的设置就能完成图片刷新。为了方便,代码全写在一个脚本,需要的自己整合一下。
使用方法:将脚本挂载到RawImage控件,调用SetOnlineTexture方法,传入图片网路地址即可。
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using System;
- using System.Collections.Generic;
-
- [RequireComponent(typeof(RawImage))]
- public class ImageDownloader : MonoBehaviour
- {
- private static Dictionary<string,Texture2D> mImageCacheDict = new Dictionary<string, Texture2D>();
- private RawImage mImage;
-
- void Awake()
- {
- mImage = GetComponent<RawImage>();
-
- //Test
- //SetOnlineTexture("http://thirdwx.qlogo.cn/mmopen/vi_32/ceXE8MaLuaThTbb3hibXvcoq6q3tt7APnP5GicHY6caYkYa86sVBMhH7JKQJICfWlsD4PTWlM3iaKXjdoM5gp1Ddg/96");
- }
-
-
- public void SetOnlineTexture(string mUrl)
- {
- Action<bool,Texture2D> handle = (bool mIsSuccess, Texture2D mSetupTexture) =>
- {
- if (mIsSuccess)
- {
- mImage.texture = mSetupTexture;
- }
- else
- {
- //TODO 加载失败处理
- }
- };
-
- Texture2D mTexture;
- if (TryGetImageInCache(mUrl, out mTexture))
- {
- handle(true, mTexture);
- }
- else
- {
- StartCoroutine(DownLoadImages(mUrl, handle));
- }
- }
-
- IEnumerator DownLoadImages(string mUrl, Action<bool, Texture2D> mCallBack)
- {
- WWW www = new WWW(mUrl);
- while (!www.isDone)
- {
- yield return null;
- }
-
- if (string.IsNullOrEmpty(www.error))
- {
- UpdateImageInCache(mUrl, www.texture);
- mCallBack(true, www.texture);
- }
- else
- {
- mCallBack(false, null);
- }
-
- www.Dispose();
- yield return null;
- }
-
- public static bool TryGetImageInCache(string mPath, out Texture2D mTexture)
- {
- return mImageCacheDict.TryGetValue(mPath, out mTexture);
- }
-
- public static void UpdateImageInCache(string mPath, Texture2D mTexture)
- {
- if (mImageCacheDict.ContainsKey(mPath))
- {
- mImageCacheDict[mPath] = mTexture;
- }
- else
- {
- mImageCacheDict.Add(mPath, mTexture);
- }
- }
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。