いくつかの新しいことを学ぼうとしても、これを理解できません。どんな助けでも大歓迎です。 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
にスワップしたい新しいドロウアブルができましたか?さて、それをどのようにレイヤーリストに入れるのですか? findDrawableByLayerId
とsetDrawableByLayerId
を使用すると仮定しますが、どのくらい正確ですか?または私はそれを完全に間違っている可能性があります!助けて!
私は何をしようとしていますか?表示されるドロアブルを変更します。たとえば、「Android_purple」という別のドロウアブルがあったとします。上記のレイヤーリストの例で「Android_green」ドロウアブルに切り替えるにはどうすればよいですか?
編集:
これまでの私の限られた知識では、これまでのところ私のコードです(これはnot動作しますが、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.
質問:レイヤーリストのドロアブルの1つをプログラムで参照して、別のドロアブルに変更するにはどうすればよいですか?
私がしようとするものは次のとおりです。
ステップ#1:図のように_Android:id
_要素に_<item>
_属性を設定します ドキュメント内
ステップ#2:getDrawable()
の結果を LayerDrawable
にキャストします
ステップ#3:Drawable
を使用して他の人に影響を与えたくない場合は、mutate()
を呼び出します(オプションの場合があります)
ステップ#4:setDrawableByLayerId()
を呼び出して、特定のレイヤーIDのDrawable
を設定/置換します
ステップ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レイアウトコードのlayer-listのID)
ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1);
ステップ5:(再)-更新したLayerDrawableでImageviewを設定します:
layoutlist1.setImageDrawable(ld);
リソース:私はソフトウェアおよびモバイルアプリの開発者です。
この点にたどり着くために、私はStackflow.comのすべてのWebおよび多くの場所を調べました。すべての答えは、このページにすでにあるもののようでした。私は同じことをしようとしていました。それから、「イメージを更新する」というアイデアを考えて、これに至りました。
この 動作する/動作する リストのアイテムの1つにビットマップを置きたいときのために。 replace(setDrawableByLayerId)メソッドを使用するだけです。 IDを置き換える。 ImageViewには多くのメソッドがあります。
これも役に立ちました: LayerList drawable + Bitmapへの変換