안드로이드 개발 팁 #84 - 스팀잇 프로필 이미지를 로딩하는 ImageView 클래스의 확장 함수 loadSmallSteemitProfileImage
스팀잇 프로필 이미지를 로딩하는 ImageView 클래스의 확장 함수 loadSmallSteemitProfileImage
No. 84
2024. 09. 14 (토) | Written by @dorian-mobileapp
시작하며...
스팀잇 계정의 프로필 이미지를 로딩하는 URL은 다음과 같습니다.
- https://steemitimages.com/u/{account}/avatar/small
- https://steemitimages.com/u/{account}/avatar/medium
- https://steemitimages.com/u/{account}/avatar/large
그런데 이를 하드코딩한 값으로 이미지를 로딩하는 것은 좋은 방법이 아닙니다. 좀 더 나은 방법을 고려해 보았구요. 계정 이름으로 프로필 이미지를 로딩하는 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가 아니면, 디폴트 이미지를 대신 로딩
지난 안드로이드 개발 팁
- #83 - 마진을 설정하는 View 클래스의 확장 함수 setMargin(left, top, right, bottom)
- #82 - Map 클래스에서 데이터를 읽는 확장 함수 read
- #81 - Android API 타겟 버전 34로 상향 후, 추가 수정할 사항들
- #80 - 액티비티에서 설정 화면 실행 방법 (1)
- #79 - (개념정리) 서비스란?
- #78 - 구글 로그인 적용을 위한 SHA 인증서 등록
- #77 - View 객체의 post 메소드를 실행해야 할 경우
- #76 - Firebase의 Crashlytics 적용 방법
- #75 - n초 뒤 자동으로 다음 화면으로 넘어가는 코드를 코루틴으로 개발시 주의점
- #74 - assets 폴더의 오디오 파일을 재생하는 MediaPlayer 클래스의 확장함수
- #73 - assets 폴더의 오디오 파일 재생 준비하는 MediaPlayer 클래스의 확장함수
- #72 - ConstraintLayout에서 자식 뷰의 z 순서 정하기
- #71 - Serializable 객체를 간단히 읽을 수 있는 Intent 클래스의 확장함수 구현
- #70 - 2가지 조건에 따라 배경색을 다르게 설정하기 위한 selector 리소스 정의 방법
- #69 - ToggleButton 뷰에 적용된 그림자 효과 제거
- #68 - 타겟팅 버전 33 변경 후, 발생하는 SecurityException 해결 방법 (from registerReceiver)
- #67 - 인텐트에 데이터를 읽거나 기록할 때 발생하는 BadParcelableException 예외
- #66 - Deprecated 코드 개선: Intent 클래스의 getSerializableExtra 메소드
- #65 - 화면 전체를 차지한 뷰를 위로 밀어 올리는 애니메이션 리소스
- #64 - android.database.Cursor 클래스의 확장 함수
- #63 - 모서리가 둥근 사각형
- #62 - 키보드 숨김 실행 방법 그리고 이를 실행하는 확장 메소드
- #61 - 타겟 SDK 버전을 34로 설정 후 수정해야 하는 코드
- #60 - (ChatGPT 활용) 아이디에 마스크 적용하기
- #59 - ChatGPT로 간단한 코딩은 질문으로 물어보자
- #58 - TextView 뷰에 스크롤 적용 방법
- #57 - JSON 포맷의 문자열을 GSON 라이브러리 제공 JsonObject 타입으로 변환
- #56 - 앱이 백그라운드 모드에서도 라이브 데이터 관찰 방법
- #55 - 프래그먼트에서 코루틴 플로우 수집 주기 정하기
- #54 - 떠 있는 키보드 숨기는 방법
- #53 - 1줄의 텍스트를 입력받는 EditText 뷰에서 엔터 키 누름 처리 방법
- #52 - 마크다운 텍스트를 웹뷰로 보여주기 위해 추가로 설정해야 할 것
- #51 - 마크다운 텍스트를 HTML 텍스트로 변환한 후 스타일 적용 방법
- #1 ~ #50
Layout provided by Steemit Enhancer hommage by ayogom
Posted through the ECblog app (https://blog.etain.club)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.