- 위임(by) 없는 코드
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ImageCard()
}
}
}
@Composable
fun ImageCard() {
val isFavorite = remember {
mutableStateOf(false)
}
Card(
modifier = Modifier
.fillMaxWidth(0.5f)
.padding(16.dp),
shape = RoundedCornerShape(8.dp),
elevation = 5.dp
) {
Box(
modifier = Modifier.height(200.dp),
) {
Image(
painter = painterResource(id = R.drawable.img),
contentDescription = "Yun_ji",
contentScale = ContentScale.Crop
)
Box(
modifier =
Modifier.fillMaxSize(),
contentAlignment = Alignment.TopEnd
) {
IconButton(onClick = {
isFavorite.value = !isFavorite.value
}) {
Icon(
imageVector = if(isFavorite.value) Icons.Default.Favorite else Icons.Default.FavoriteBorder,
contentDescription = "favorite",
tint = Color.White
)
}
}
}
}
}
- 위임(by) 처리 코드
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.runtime.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ImageCard()
}
}
}
@Composable
fun ImageCard() {
var isFavorite by remember {
mutableStateOf(false)
}
Card(
modifier = Modifier
.fillMaxWidth(0.5f)
.padding(16.dp),
shape = RoundedCornerShape(8.dp),
elevation = 5.dp
) {
Box(
modifier = Modifier.height(200.dp),
) {
Image(
painter = painterResource(id = R.drawable.img),
contentDescription = "Yun_ji",
contentScale = ContentScale.Crop
)
Box(
modifier =
Modifier.fillMaxSize(),
contentAlignment = Alignment.TopEnd
) {
IconButton(onClick = {
isFavorite = !isFavorite
}) {
Icon(
imageVector = if(isFavorite) Icons.Default.Favorite else Icons.Default.FavoriteBorder,
contentDescription = "favorite",
tint = Color.White
)
}
}
}
}
}
- rememberSaveable
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.runtime.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ImageCard()
}
}
}
@Composable
fun ImageCard() {
var isFavorite by rememberSaveable {
mutableStateOf(false)
}
Card(
modifier = Modifier
.fillMaxWidth(0.5f)
.padding(16.dp),
shape = RoundedCornerShape(8.dp),
elevation = 5.dp
) {
Box(
modifier = Modifier.height(200.dp),
) {
Image(
painter = painterResource(id = R.drawable.img),
contentDescription = "Yun_ji",
contentScale = ContentScale.Crop
)
Box(
modifier =
Modifier.fillMaxSize(),
contentAlignment = Alignment.TopEnd
) {
IconButton(onClick = {
isFavorite = !isFavorite
}) {
Icon(
imageVector = if(isFavorite) Icons.Default.Favorite else Icons.Default.FavoriteBorder,
contentDescription = "favorite",
tint = Color.White
)
}
}
}
}
}
- 재사용성을 위한 코드
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.runtime.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
class MainActivity: ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle ? ) {
super.onCreate(savedInstanceState)
setContent {
var isFavorite by rememberSaveable {
mutableStateOf(false)
}
ImageCard(
modifier = Modifier
.fillMaxWidth(0.5 f)
.padding(16. dp),
isFavorite = isFavorite,
) {
favorite - >
isFavorite = favorite
}
}
}
}
@Composable
fun ImageCard(
modifier: Modifier = Modifier,
isFavorite: Boolean,
onTabFavorite: (Boolean) - > Unit
) {
Card(
modifier = modifier,
shape = RoundedCornerShape(8. dp),
elevation = 5. dp
) {
Box(
modifier = Modifier.height(200. dp),
) {
Image(
painter = painterResource(id = R.drawable.img),
contentDescription = "Yun_ji",
contentScale = ContentScale.Crop
)
Box(
modifier =
Modifier.fillMaxSize(),
contentAlignment = Alignment.TopEnd
) {
IconButton(onClick = {
onTabFavorite(!isFavorite)
}) {
Icon(
imageVector =
if (isFavorite) Icons.Default.Favorite
else Icons.Default.FavoriteBorder,
contentDescription = "favorite",
tint = Color.White
)
}
}
}
}
}
틀린 부분 지적은 언제나 환영해요🤗