Отображение изображения из URL - проблемы с размерами и ориентацией экрана - PullRequest
6 голосов
/ 30 августа 2010

Я пытаюсь отобразить изображение с URL-адреса, размер которого может превышать размеры экрана. У меня это вроде работает, но я бы хотел, чтобы оно масштабировалось по размеру экрана, и у меня также возникают проблемы при изменении ориентации экрана. Изображение крошечное, и мне бы хотелось, чтобы оно масштабировалось по ширине и на экран. (В обоих случаях я бы хотел, чтобы изображение заполняло ширину экрана полосами прокрутки (если необходимо для высоты).

Вот мой ImageView:

<ImageView android:id="@+id/ImageView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true">
</ImageView>

Вот код Java, который загружает изображение: (некоторый код обработки ошибок удален для простоты)

    Object content = null;
    try{
      URL url = new URL("http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg");
      content = url.getContent();
    }
      catch(Exception ex)
    {
        ex.printStackTrace();
    }
    InputStream is = (InputStream)content;
    Drawable image = Drawable.createFromStream(is, "src");
    Image01.setImageDrawable(image);

Я пробовал разные настройки для Android: scaleType. Извините, если этот вопрос уже задавался. Я прошел ряд уроков по этой теме, но они мне не подходят. Не уверен, имеет ли это отношение к способу загрузки изображения. (из Интернета вместо локального ресурса)

Другая проблема заключается в том, что иногда изображение даже не загружается. Нет ошибок во время выполнения, я просто ничего не получаю в ImageView.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или разъяснения.

1 Ответ

9 голосов
/ 30 августа 2010

вопрос о том, что «иногда изображение даже не загружается» связан с контекстом, поэтому я использовал эти функции для решения этой проблемы

public Object fetch(String address) throws MalformedURLException,
    IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }  

    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (MalformedURLException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }

, чтобы заполнить ширину экрана вашим изображениемдолжен иметь такой код

    try{
        String url = "http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg";           
        Drawable image =ImageOperations(this,url);
        Image01.setImageDrawable(image);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }


    Image01.setMinimumWidth(width);
    Image01.setMinimumHeight(height);

    Image01.setMaxWidth(width);
    Image01.setMaxHeight(height);

ОБНОВЛЕНИЕ :: если вы загружаете изображение большого размера, очевидно, вам придется ждать больше времени, и могут возникнуть проблемы с загрузкой для UnknowHostException.

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

, чтобы избежать проблем при смене поворота, установите свойство configChanges = "keyboardHidden | Ориентация" внутри вашего Manifest.xml

<activity android:name=".myActivity"
...
         android:configChanges="keyboardHidden|orientation"   >
...
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...