Libgdx在运行时从facebook获取图像

时间:2014-01-27 06:59:35

标签: android facebook facebook-graph-api libgdx

我有来自facebook的image-url,我想在我的游戏中使用libgdx在runtine上显示该图像。我正在使用facebook图形api并在Json解析的帮助下解析数据。我的方法如下:

在主要活动中

protected void gettingfacebookData() {
    try {
        JSONArray friendArray = new JSONArray(
                prefLevel.getFriendFacebookData());
        for (int i = 0; i < friendArray.length(); i++) {
            JSONObject jsonObject = friendArray.getJSONObject(i);

            String name = jsonObject.getString("name");
            String score = jsonObject.getString("score");
            String fid = jsonObject.getString("fid");
            String image = "http://graph.facebook.com/" + fid
                    + "/picture?type=large";
//saving score into array list
            PlayingScreen.scoreAl.add(score);
//saving image url into arraylist
            PlayingScreen.imageUrlAl.add(image);

            }           }

        } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

现在如何在运行时使用此特定图像网址显示图像?

2 个答案:

答案 0 :(得分:2)

我们使用包装Texture的包装类来显示来自网络的图像(如facebook个人资料图片)。这个包装类获取图像的url和临时纹理。就像创建包装器一样,它开始在后台线程中下载图像字节。此包装类的使用者只需调用getTexture()来获取纹理,直到下载完成,此方法返回临时纹理。当有可用的字节来创建纹理getTexture()时,处理这个字节并开始返回从url创建的新纹理。

以下是此包装类的简单版本。请注意,processTextureBytesgetTexture方法内部调用,而不是在后台线程中调用。这是因为我们必须在获得GLContext的线程中构造纹理。您可以向此类添加缓存和重试机制。

BTW,而不是使用http://graph.facebook.com/[uid]/picture网址尝试使用FQL中的pic_个网址之一。您可以查看this

public class WebTexture {
    private final String url;
    private Texture texture;
    private volatile byte[] textureBytes;

    public WebTexture(String url, Texture tempTexture) {
        this.url = url;
        texture = tempTexture;
        downloadTextureAsync();
    }

    private void downloadTextureAsync() {
        Utils.runInBackground(new Runnable() {
            @Override
            public void run() {
                textureBytes = downloadTextureBytes();
            }
        });
    }

    private byte[] downloadTextureBytes() {
        try {
            return Utils.downloadData(url);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public Texture getTexture() {
        if (textureBytes != null)
            processTextureBytes();
        return texture;
    }

    private void processTextureBytes() {
        try {
            Pixmap pixmap = new Pixmap(textureBytes, 0, textureBytes.length);
            Texture gdxTexture = new Texture(pixmap);
            gdxTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
            texture = gdxTexture;
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            textureBytes = null;
        }
    }
}

答案 1 :(得分:1)

  1. 您应下载图片。
  2. 将图像作为字节数组后,可以创建像素图: Pixmap pixmap = new Pixmap(imageBytes, 0, imageBytes.length);

  3. 然后您可以使用此像素图来渲染图像。例如,如果您使用的是scene2d.ui,则可以按如下方式设置Image的drawable:

  4. image.setDrawable(new TextureRegionDrawable(new TextureRegion(new Texture(profilePicture))));

    希望这有帮助。