MainActivity.kt
package com.cfsuman.jetpackcompose
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MainContent()
}
}
@Composable
fun MainContent(){
Column(
modifier = Modifier
.background(Color(0xFFEDEAE0))
.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
val counter = remember { mutableStateOf(0) }
val angle: Float by animateFloatAsState(
targetValue = counter.value.toFloat(),
animationSpec = tween(
durationMillis = 3000, // duration
easing = FastOutSlowInEasing
)
)
Text(
text = "Press Me : ${counter.value}\u00B0",
fontSize = 40.sp,
color = Color(0xFFFFB200),
textAlign = TextAlign.Center,
modifier = Modifier
.pointerInput(Unit) {
detectTapGestures(
onPress = {
if (counter.value == 360){
counter.value = 0
}else{
counter.value += 45
}
}
)
}
.fillMaxWidth(0.9F)
.rotate(angle)
.clip(CircleShape)
.background(Color(0xFF58111A))
.padding(25.dp)
)
}
}
@Preview
@Composable
fun ComposablePreview(){
//MainContent()
}
}


- jetpack compose - AnimateColorAsState
- jetpack compose - Infinite float animation
- jetpack compose - Animation start delay
- jetpack compose - Draw circle on canvas
- jetpack compose - Draw rectangle on canvas
- jetpack compose - Draw rounded rectangle on canvas
- jetpack compose - Canvas withTransform
- jetpack compose - Canvas inset
- jetpack compose - Draw arc on canvas
- jetpack compose - Double tap listener
- jetpack compose - Long press listener
- jetpack compose - Tap listener
- jetpack compose - Column vertical scrolling
- jetpack compose - Column border
- jetpack compose - Column spacing