GUILayout.BeginScrollView - 如何加载从http下载的图像

问题描述 投票:0回答:2

我有一个从网站下载的图像 URL 列表。我只想在

GUILayout.BeginScrollView
上展示这些图像。我查了好几天了,没有找到合适的答案。

这是我的代码:

public void OnSuccess(object responseFromServer)
{
  File imageObj = (File)responseFromServer;
  IList<File.Image> imageList = imageObj.GetFileList();
  for (int i = 0; i < imageList.Count; i++)
  {
    Debug.Log ("Downloaded Image Url Is  : " + imageList[i].GetUrl());
  }
}

现在,我有很多图像 URL,但是如何使用

GUILayout.BeginScrollview
显示这些 URL 的图像?

c# unity-game-engine
2个回答
1
投票

@Akshay 嗨,你已经准备好了,试试这个......

如果你有一个图像列表,那么将它们添加到一个IList中,得到它,并使用texture2D inOrder将这些图像显示到滚动视图。看看这个,我想这就是你的答案......

public void OnSuccess(object responseFromServer)
{
  File imageObj = (File)responseFromServer;
  IList<File.Image> imageList = imageObj.GetFileList();
  for (int i = 0; i < imageList.Count; i++)
   {
    Debug.Log ("Downloaded Image Url Is  : " + imageList[i].GetUrl());
// just add this in your callBack response. ClassName shoud be where you want to show your // images i.e OnGUI defined..
    (Your_MonoBehaviour_ClassName).GetInstance().ExecuteShow(imageList[i].GetUrl());

   }
}

现在在您想要将这些图像添加到滚动视图的主类中编写此休息调用...这真的很简单..

private static Your_class_Name con = null;

    public static Your_class_Name GetInstance ()
                    {
                            if (con == null) {
                                    con = (new GameObject ("Your_class_Name")).AddComponent<Your_class_Name> ();
                                    return con;
                            } else {
                                    return con;
                            }
                    } 

public string ExecuteShow (string url)
        {
               string responseFromServer = null;
               StartCoroutine (ShowAllImages (url));
               return responseFromServer;
        }

            IEnumerator ShowAllImages (string uri)
            {
                    IEnumerator e = executeShowAll (uri);
                    while (e.MoveNext())
                    {
                            yield return e.Current;
                    }
            }


    IEnumerator executeShowAll (string url)
            {
                    WWW www = new WWW (url);
                    while (!www.isDone) 
                            {

                                    yield return null;  
                            }
                            if (www.isDone)
                    {
                      listOfImages.Add(www.texture);        
                    }

            }

现在你正在寻找 listOfImages 是什么..这只是一个“IList listOfImages = new List();” ,这背后的目的是.. 看到了..

//========Setting Up ScrollView====================================================        
                scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(155));
                if(listOfImages.Count > 1)
                {
                        for(int i=0; i<listOfImages.Count; i++)
                        {
                                Texture2D myImage = (Texture2D)listOfImages[i];
                                GUILayout.Label(myImage,GUILayout.Height(100),GUILayout.Width(100));
                        }
                }
         GUILayout.EndScrollView();
                //========ScrollView=============================================================== 

我想,你明白了...因为我致力于它..而且它真的非常简单..


0
投票

如果您可以在Texture2D中获取图像,我有滚动视图的工作代码。

void OnGUI()
{ 
        savedMatrix=GUI.matrix;
        scrollPosition = GUI.BeginScrollView (new Rect (250f,10f,500f,1000f),scrollPosition, new Rect (10f, 0f, 250f, snaps.Length*150f));
        for(int i=0;i<snaps.Length;i++)
        {
            GUI.DrawTexture(new Rect(0f,10f+i*140f,250f,200f),snaps[i]);
        }
        GUI.EndScrollView();
        GUI.matrix=savedMatrix;
}

对于来自服务器的texture2D,请使用此

IEnumerator Start() 
{
    WWW www = new WWW(url);
    yield return www;
    snap.Add(www.texture);
}
© www.soinside.com 2019 - 2024. All rights reserved.