来自Url的Drawable vs Image上的图像

时间:2012-01-07 20:09:34

标签: android image url

当我按下特定按钮时,我想要显示图像(如地图)。对我的应用来说什么更轻量级?从网址获取此信息或将其放在可绘制文件夹中并显示它?

如果我选择第二个,并且想要实现一个“后退”按钮,我将不得不把所有东西放在一个额外的课程中?

我的应用程序需要连接到Internet,无论如何。

1 个答案:

答案 0 :(得分:1)

我会选择一个drawable,纯粹出于这个原因,当用户启动没有wifi / 3g /等的应用程序时会发生什么。或者连接速度极慢。您说您的应用程序需要连接,但这并不一定意味着用户在启动应用程序时会启用它。

使用drawable它也更容易,只需将其放入drawable文件夹,然后将其指定为ImageView的源(如果您使用的是可点击的imageview)

<ImageView android:layout_height="wrap_content" android:id="@+id/imageView1"
    android:layout_width="wrap_content" android:src="@drawable/your_image">
</ImageView>

或作为背景,如果您在xml文件中使用Button。

    <Button android:text="" android:id="@+id/button1"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:background="@drawable/your_image">
    </Button

虽然你可能想使用一个选择器来改变两个图像(按下和未按下状态)

          

而是将选择器xml文件指定为背景/源

android:background="@drawable/back_button_selector"

下载图像需要在后台线程(例如AsycnTask)中完成,否则在下载图像时UI不会响应。

但是如果您因某种原因决定下载图像(即您希望更改图像而不进行更新而只是在服务器上更改),这里有一个AsyncTask来下载图像(您可以将其用作一个内在的课程)

public class GetImage extends AsyncTask<ImageView, Void, ImageView> {

String url = null;
Bitmap thumbnail = null;
public GetImage(String url){
    this.url = url;
}
@Override
protected void onPreExecute() {

}

@Override
protected ImageView doInBackground(ImageView... params) {

    try {
        thumbnail = BitmapFactory.decodeStream((InputStream) new URL(url).getContent());

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return params[0];

}

@Override
public void onPostExecute(ImageView result) {
    result.setImageBitmap(thumbnail);

}
}