diff --git a/app/build.gradle b/app/build.gradle index a6e7cf4..f4608f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,8 @@ plugins { id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.20' } +apply plugin: 'kotlin-kapt' + Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) @@ -31,11 +33,11 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '11' + jvmTarget = '17' } buildFeatures { viewBinding true @@ -68,6 +70,7 @@ dependencies { implementation("com.squareup.okhttp3:logging-interceptor") implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" implementation 'androidx.core:core-ktx:1.8.0' diff --git a/app/src/main/java/org/sopt/dosopttemplate/data/adaptor/UserAdaptor.kt b/app/src/main/java/org/sopt/dosopttemplate/data/adaptor/UserAdaptor.kt index 6e07dac..88ab9bb 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/data/adaptor/UserAdaptor.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/data/adaptor/UserAdaptor.kt @@ -3,8 +3,10 @@ package org.sopt.dosopttemplate.data.adaptor import android.content.Context import android.view.LayoutInflater import android.view.ViewGroup +import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide +import com.google.android.material.imageview.ShapeableImageView import org.sopt.dosopttemplate.databinding.ItemFriendBinding import org.sopt.dosopttemplate.server.auth.response.ResponseUserListDataDto @@ -35,10 +37,29 @@ class UserViewHolder(private val binding: ItemFriendBinding) : RecyclerView.ViewHolder(binding.root) { private val context: Context = binding.root.context fun onBind(user: ResponseUserListDataDto) { - Glide.with(context) - .load(user.avatar).into(binding.ivItemImage) - + loadImage(binding.ivItemImage, user.avatar) binding.tvItemName.text = user.firstName binding.tvItemMessage.text = user.email } + + //기존 뷰들에 없는 새로운 xml 속성을 연결하는 기능 메소드를 가지는 객체 + //보통 static 메소드를 가진 class로 사용 + //static 메소드를 가져야하기 때문에 class면 안됨 object로 명시 + companion object { + //객체가 단 한마리 밖에 없는 애 : 싱글턴 패턴!! + + + @JvmStatic //static 만드는 어노테이션 + // 1) 이미지뷰에 새로운 xml 속성 만들기 + // [속성명 : imageUrl ] + @BindingAdapter("imageUrl") //어노테이션 해독기 필요 - 빌드그래이들에 기능 추가 필요! + fun loadImage(view: ShapeableImageView, imageUrl: String?) { + imageUrl?.let { + //메소드 명은 내 맘대로 다만! 파라미터 (어떤뷰에 주는지(뷰타입), 어떤 값인지(속성값)) 가 중요!! + Glide.with(view.context) + .load(it) + .into(view) + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_friend.xml b/app/src/main/res/layout/item_friend.xml index 70247fc..3322595 100644 --- a/app/src/main/res/layout/item_friend.xml +++ b/app/src/main/res/layout/item_friend.xml @@ -12,7 +12,8 @@ android:layout_marginVertical="15dp" android:layout_marginStart="25dp" android:scaleType="centerCrop" - android:src="@drawable/kakao_profile_sky" + tools:src="@drawable/kakao_profile_sky" + imageUrl="@{user.avatar}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="1" app:layout_constraintStart_toStartOf="parent"