안드로이드 개발 팁 #84 - 스팀잇 프로필 이미지를 로딩하는 ImageView 클래스의 확장 함수 loadSmallSteemitProfileImage

스팀잇 프로필 이미지를 로딩하는 ImageView 클래스의 확장 함수 loadSmallSteemitProfileImage

No. 84
2024. 09. 14 (토) | Written by @dorian-mobileapp

시작하며...

스팀잇 계정의 프로필 이미지를 로딩하는 URL은 다음과 같습니다.

그런데 이를 하드코딩한 값으로 이미지를 로딩하는 것은 좋은 방법이 아닙니다. 좀 더 나은 방법을 고려해 보았구요. 계정 이름으로 프로필 이미지를 로딩하는 ImageView 뷰의 확장 함수를 만들기로 했습니다.


스팀잇 프로필 이미지를 로딩하는 ImageView 클래스의 확장 함수 loadSmallSteemitProfileImage

작은 프로필 이미지를 로딩하는 확장 함수는 아래와 같이 구현했습니다.

fun ImageView.loadSmallSteemitProfileImage(account: String) {
    load("https://steemitimages.com/u/${account}/avatar/small")
}

URL로 이미지를 로딩하는 확장 함수 load를 구현했었습니다. 위 함수에서 그것을 활용했어요.


URL로 이미지를 로딩하는 Image.load 확장 함수

fun ImageView.load(url: String, defaultDrawableId: Int? = R.drawable.no_image_available) {
    val imageWidth = this.width
    val imageHeight = this.height
    val thisImageView = this

    if (url.isEmpty() or (!url.startsWith("https://"))) {
        Glide.with(thisImageView)
            .load(defaultDrawableId)
            .override(imageWidth, imageHeight)
            .into(thisImageView)
    }
    else {
        Glide.with(thisImageView)
            .load(Uri.parse(url))
            .override(imageWidth, imageHeight)
            .thumbnail(Glide.with(thisImageView).load(R.drawable.loading))
            .listener(object: RequestListener<Drawable> {
                override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
                    thisImageView.setImageDrawable(when {
                        defaultDrawableId == null -> null
                        else -> ContextCompat.getDrawable(thisImageView.context, defaultDrawableId)
                    })
                    return false
                }

                override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                    thisImageView.setImageDrawable(resource)
                    return false
                }
            })
            .into(thisImageView)
    }
}
파라메터
  • url: String
    • 로딩할 이미지의 URL
  • defaultDrawableId: Int?
    • 이미지 로딩에 실패할 경우 대신 로딩할 디폴트 이미지의 리소스 ID
    • url이 빈 값이거나 그것의 scheme가 https가 아니면, 디폴트 이미지를 대신 로딩

지난 안드로이드 개발 팁


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.10
TRX 0.32
JST 0.033
BTC 112671.11
ETH 4108.63
USDT 1.00
SBD 0.67