我有来自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();
}
}
现在如何在运行时使用此特定图像网址显示图像?
答案 0 :(得分:2)
我们使用包装Texture
的包装类来显示来自网络的图像(如facebook个人资料图片)。这个包装类获取图像的url和临时纹理。就像创建包装器一样,它开始在后台线程中下载图像字节。此包装类的使用者只需调用getTexture()
来获取纹理,直到下载完成,此方法返回临时纹理。当有可用的字节来创建纹理getTexture()
时,处理这个字节并开始返回从url创建的新纹理。
以下是此包装类的简单版本。请注意,processTextureBytes
在getTexture
方法内部调用,而不是在后台线程中调用。这是因为我们必须在获得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)
将图像作为字节数组后,可以创建像素图:
Pixmap pixmap = new Pixmap(imageBytes, 0, imageBytes.length);
然后您可以使用此像素图来渲染图像。例如,如果您使用的是scene2d.ui,则可以按如下方式设置Image的drawable:
image.setDrawable(new TextureRegionDrawable(new TextureRegion(new Texture(profilePicture))));
希望这有帮助。