###getDrawable()の扱い
私は画像表示の方法として、String.xmlにR.drawableの名前を指定し、それをactivityで動的に取得するという方式をとっています。そしてそれは実際に上手くいっています。
以下はその簡略したコードです
lang
1ImageView base= (ImageView) findViewById(R.id.base); 2//numberが変化する。Strings.xmlから動的にIdを取得。 3int baseId = getResources().getIdentifier("base" + number, "string", getPackageName()); 4base.setImageResource(baseId);
lang
1<string name="base1">@drawable/taro_base</string> 2<string name="base2">@drawable/hanako_base</string> 3<string name="base3">@drawable/taro_base</string> 4・・・・
ここからが本題で、実はある事情により、javaコードを使って画像を重ねる必要が出てきました。
さてどうしよう思い、LayerDrawableを使うことにしました。
そのさいに参考にしたのがこのサイトです。
具体的に言うと以下の部分です。
lang
1// LayerDrawable の素材となる Drawable を取得 2Resources r = getResources(); 3Drawable shape = r.getDrawable(R.drawable.shape_sample); 4Drawable droid = r.getDrawable(R.drawable.droid); 5 6// LayerDrawable を生成 7Drawable[] layers = { shape, droid }; 8LayerDrawable layerDrawable = new LayerDrawable(layers); 9 10// padding を設定する 11int padding = r.getDimensionPixelSize(R.dimen.padding); 12layerDrawable.setLayerInset(1, padding, padding, padding, padding); 13 14// View にセットする 15ImageView view = (ImageView) findViewById(R.id.image_view); 16view.setImageDrawable(layerDrawable);
これにならってコードを書きました。しかしアプリは止ってしまいました。
デバックしてみるとどうやらgetDrawable(baseId)のところでエラーが起きているようです。
以下にそのコードを記します。
(重ねる画像について、全てのコードを書くと冗長になるので、適宜略しています)
lang
1ImageView base= (ImageView) findViewById(R.id.base); 2略ーー 3int baseId = getResources().getIdentifier("base" + number, "string", getPackageName()); 4略ーー 5Drawable base=getResources().getDrawable(baseId);//ここで止る 6 7Drawable[] layers = { base, 略}; 8 LayerDrawable layerDrawable = new LayerDrawable(layers); 9 ImageView view = (ImageView) findViewById(R.id.略); 10 view.setImageDrawable(layerDrawable); 11
これはgetDrawable()
がsetImageDrawable()
のように、Strings.xmlで取得した文字列のIDを持ってくることができないということなのでしょうか?
参考にしたサイトにはgetDrawable(R.drawable.shape_sample)
とあるのでこの引数にStrings.xmlで取得した文字列のIDを入れてあげればいいと思ったのですが・・・・
だとすればどのように解決できるでしょうか?
どなたかご教授いただけると助かります・・・・!
追記ーーー
調べたところ今はgetDrawable()
が非推奨になっているようですね・・・
ですが、Drawable drawable = ResourcesCompat.getDrawable(getResources(), baseId, null);
としてもだめでした・・・
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/28 06:38