2010-08-30 5 views
6

Я пытаюсь отобразить изображение с 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); 

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

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

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

ответ

9

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

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); 

UPDATE :: , если вы загружаете большой размер, очевидно, вам придется ждать больше времени, и загрузить проблемы могут быть вызваны для UnknowHostException.

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

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

<activity android:name=".myActivity" 
... 
     android:configChanges="keyboardHidden|orientation" > 
... 
/> 
+0

Спасибо за помощь с Min и Max ширина. Это сделало трюк, хотя мне нужно было поместить ImageView внутри ScrollView, если установка ширины заставила изображение превысить доступную высоту. – RMS2

+0

Теперь, когда изображение не загружается (я использовал код Joregsys), я сталкиваюсь со всеми неприятностями. Похоже, что когда изображение не отображается, происходит то, что я получаю сообщение об ошибке «SkImageDecoder :: Factory возвращается null» при выполнении метода .createFromStream. Иногда это работает, и иногда я получаю это. Я попытался закрыть InputStream, чтобы сбросить буфер, но не уйти. Я пробовал обматывать эти строки кода через некоторое время (d == null), но тогда я просто получаю бесконечный цикл. – RMS2

+0

У меня также проблемы с памятью, когда я поворачиваю экран. Если изображение загружается в первый раз, я получаю OutOfMemoryError при изменении ориентации. Изображение 1MB - маленькое с точки зрения цифровой фотографии, но, может быть, оно слишком велико для Android? Я думаю, что у меня возникают утечки памяти. Я попробовал Image01.getDrawable(). SetCallback (null); в операции onDestroy(), но это не помогает. – RMS2

Смежные вопросы