0

次のように XML で ImageView を定義しています。

        <ImageView
            android:id="@+id/background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"/>   

ユーザーのアクション (ライブラリから画像を選択する) に基づいて、コードで画像の内容を動的に設定しようとしています。次のコードを使用して画像を設定しました。

    ImageView bgView = (ImageView)root.findViewById(R.id.background);
    Drawable d = Drawable.createFromPath(wallpaper);
    bgView.setImageDrawable(d);

このコードを呼び出しても、ImageView インスタンスにすぐには影響しません。ただし、何らかの画像を XML 定義に入れると、次のようになります。

        <ImageView
            android:id="@+id/background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/test_image"/> 

それは正常に動作します。問題の原因が何であるかを知っている人はいますか? 画像設定コードが UI スレッドで実行されていること、および作成された Drawable が有効であることを確認しました。追加された画像を反映するためにレイアウトが正しく行われていないことに関連しているように感じますか?

4

2 に答える 2

1

試す:

ImageView bgView = (ImageView)root.findViewById(R.id.background);
Drawable d = Drawable.createFromPath(wallpaper);
// check d != null
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
bgView.setImageDrawable(d);
于 2013-02-13T14:44:49.470 に答える
0

それで、もう少し掘り下げた後、問題が何であるかを理解しました。空の画像が設定されている場合 (つまり、ユーザー設定でカスタム背景が見つからない場合の既定の状態)、私のコードはビューが読み込まれるときに .setImageDrawable(null) を実行します。これを削除すると、問題が解決したようです。

于 2013-02-13T15:36:07.367 に答える