45

いくつかの新しいことを学ぼうとしていて、これを理解できない場合は、助けていただければ幸いです。Googleのドキュメントからのこの単純なコードを考えると:

layers.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/first_image">
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:id="@+id/second_image" android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:id="@+id/third_image" android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

そしてmain.xml:

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

質問:レイヤーリスト内のドローアブルの1つをプログラムで参照して、別のドローアブルに変更するにはどうすればよいですか?

ありがとう。

myImageこれで、変数を正しく交換したい新しいドローアブルができましたか?では、どうすればそれをレイヤーリストに入れることができますか?私はとを使用すると思いますfindDrawableByLayerIdsetDrawableByLayerId、どのくらい正確ですか?または私はそれを完全に間違っている可能性があります!ヘルプ!

私は何をしようとしていますか?表示されるドローアブルを変更します。たとえば、「android_purple」という別のドローアブルがあるとすると、上記のレイヤーリストの例の「android_green」ドローアブルに切り替えるにはどうすればよいでしょうか。

編集:

私の限られた知識で、これまでの私のコードは次のとおりです(これは機能せsetDrawableByLayerId、未定義のエラーが発生します):

Resources res = getApplicationContext().getResources();
BitmapDrawable newImage = (BitmapDrawable) res.getDrawable(R.drawable.android_purple); //Get replacement image, can't use LayerDrawable or get error.   
boolean layer_drawable_changed = (setDrawableByLayerId((R.id.second_image), newImage)); //Set new drawable? Error on this line.
4

2 に答える 2

59

質問:レイヤーリスト内のドローアブルの1つをプログラムで参照して、別のドローアブルに変更するにはどうすればよいですか?

これが私が試すことです:

ステップ1:ドキュメントに示されているように、要素にandroid:id属性を配置します<item>

getDrawable()ステップ2:結果をにキャストしますLayerDrawable

ステップ3:(オプションの場合もあります)mutate()を使用して他の人に影響を与えたくない場合は、電話してくださいDrawable

ステップ4:特定のレイヤーIDsetDrawableByLayerId()のを設定/置換するための呼び出しDrawable

于 2011-11-05T11:30:37.137 に答える
56

ステップ1:ドローアブルフォルダーからレイヤーリストを取得します:(私のものは/res/drawable/digits.xmlで数字と呼ばれていました)

LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.digits);

ステップ 2: 置き換える画像に名前を付けます (既にレイヤー リストにある画像ではありません)。

Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image);

ステップ 3: setDrawableByLayerId(int id, Drawable d) メソッドを使用して画像を置き換える

boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace);

これは、画像の置換が失敗した場合に false を返すブール値を返します

ステップ 4: メインの Imageview をロードします (基本的には、実際の xml レイアウト コードのレイヤー リストの ID)。

ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1);

ステップ 5: (再)-次のように言って、更新された LayerDrawable で Imageview を設定します。

layoutlist1.setImageDrawable(ld);

リソース: 私はソフトウェアとモバイル アプリの開発者です。

この点に到達するために、私はWeb全体とStackflow.comの多くを見ました。すべての答えは、このページにすでにあったものと同じでした。私は同じことをしようとしていました。そこで「イメージをアップデートしよう」と考えて、これにたどり着きました。

これは、リスト上のアイテムの代わりにビットマップを配置する場合にも機能するはずです。replace (setDrawableByLayerId) メソッドを使用するだけです。IDで置き換えます。ImageView には多くのメソッドがあります。

これも役に立ちました: LayerList drawable + ビットマップへの変換

于 2012-06-13T19:22:37.150 に答える