0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

文字列(リソース名)で画像を取得してImageViewに貼り付ける(kotiln)

Last updated at Posted at 2021-01-05

以前書いた記事
画像名を文字列で指定してImageViewに貼り付けるコード(android)

これにLGTMしていただいていたので見てみたのですが、微妙だったので書き直します(ついでにkotlinで)
リソース名からImageViewに画像をセットするメソッドは、swiftにはあるんですがkotlinだとありそうでないです。

ちなみにswiftでは

imageView.image = UIImage(named:"hoge.png")

こんな感じでimageViewに画像をセットできます。

同じようなものをkotlinで再現してみます。

resourceIdを文字列から取得

StringExtensions.kt
fun String.getResourceId(context: Context): Int {
    return context.resources.getIdentifier(this, "drawable", context.packageName)
}

Stringの拡張クラスを定義しました

画像をImageViewにセット

ImageViewExtensions.kt
fun ImageView.setImageResourceByName(name: String) {
    this.setImageResource(name.getResourceId(context))
}

ImageViewクラスの拡張を定義しました。

使用例

    private fun setImage() {
        val imageView = ImageView(this)
        imageView.setImageResourceByName("some_image_name_string")
        parent_view.addView(imageView)
    }

parent_viewに動的にImageViewを追加しています

kotlinっぽい書き方をすると

    private fun setImage() {
        parent_view.addView(
            ImageView(this).apply {
                setImageResourceByName("some_image_name_string")
            }
        )
    }

こんな感じでしょうか。
最初は見にくいなと思っていたのですが、「parent_viewに画像を追加する」という責務がひとかたまりで表せるので個人的には気に入っています。

swiftとの比較

swift
imageView.image = UIImage(named:"some_image_name_string.png")
kotlin
imageView.setImageResourceByName("some_image_name_string")

大体似たような感じになったかと思います。
上記で定義したStringとImageViewの二つの拡張をコピペすればそのまま使えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?