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

Android:scaleType のさまざまな設定を試しました。この質問が以前に尋ねられた場合は申し訳ありません。この件に関する多くのチュートリアルを実行しましたが、うまくいかないようです。画像の読み込み方法と関係があるかどうかはわかりません。(ローカル リソースではなく Web から)

もう 1 つの問題は、画像が読み込まれない場合があることです。実行時エラーはありません。ImageView には何も表示されません。

さらに詳しい情報や説明が必要な場合はお知らせください。

4

1 に答える 1

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

更新:: 大きなサイズの画像をロードすると、明らかに時間がかかり、UnknowHostException によってダウンロードの問題が発生する可能性があります。

はい、そうです、イメージをローカルに保存します。ローカル アクセスはダウンロードよりも高速です。

ローテーションの変更に関する問題を回避するには、Manifest.xml 内に configChanges="keyboardHidden|orientation" プロパティを設定します。

<activity android:name=".myActivity"
...
         android:configChanges="keyboardHidden|orientation"   >
...
/>
于 2010-08-30T16:55:09.173 に答える