Изображение на Drawable vs Изображение с URL - PullRequest
0 голосов
/ 08 января 2012

Я хочу, чтобы при нажатии определенной кнопки отображалось изображение (например, карта).Что является более легким для моего приложения?Получать это из URL или иметь его в папке для рисования и просто отображать его?

Если я выберу второй и захочу реализовать кнопку «назад», мне придется поместить все это в дополнительныйкласс или нет?

Моему приложению требуется подключение к Интернету, независимо от этого.

1 Ответ

1 голос
/ 08 января 2012

Я бы выбрал рисование, по этой причине, что происходит, когда пользователь запускает приложение без wifi / 3g / etc.или чрезвычайно медленное соединение.Вы говорите, что вашему приложению нужно соединение, но это не обязательно означает, что пользователь включит его, когда запустит приложение.

Кроме того, с помощью drawable намного проще, просто поместите его в папку drawable, затемукажите его как источник для вашего ImageView (если вы используете интерактивный просмотр изображений)

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

или в качестве фона, если вы используете кнопку в XML-файле.

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

Вы можете использовать селектор для переключения между 2 изображениями (в нажатом и не нажатом состоянии)

и вместо этого указать XML-файл селектора в качестве фона / источника

т.е. android:background="@drawable/back_button_selector"

Загрузка изображения должна выполняться в фоновом потоке (например, AsycnTask), иначе пользовательский интерфейс не будет отвечать во время загрузки изображения.

Но если вы решите загрузитьизображение по какой-то причине (т.е. вы хотите, чтобы изображение изменилось, не выпуская обновление и просто меняя его на сервере), вот 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);

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...