Skip to content

Instantly share code, notes, and snippets.

View fvilarino's full-sized avatar

Francesc Vilariño Güell fvilarino

View GitHub Profile
@fvilarino
fvilarino / action_menu_08.kt
Created November 7, 2022 06:47
App Bar Final
sealed interface ActionMenuItem {
val title: String
val onClick: () -> Unit
sealed interface IconMenuItem : ActionMenuItem {
val icon: ImageVector
val contentDescription: String?
data class AlwaysShown(
override val title: String,
@fvilarino
fvilarino / draggable_content_final.kt
Created June 22, 2023 18:56
Draggable Contente - Final
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
PlaygroundTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background,
) {
Box {
@fvilarino
fvilarino / progress_indicator_final2.kt
Created December 3, 2022 00:22
Progress Indicator Final2
private const val NumDots = 5
private const val AnimationDuration = 2000
private const val AnimationSegment = AnimationDuration / 10
private val MainDotSize = 24.dp
private val Float.alphaFromRadians: Float
get() {
val normalized = (this / (2f * PI)).toFloat()
return .5f + (normalized - .5f).absoluteValue
}
@fvilarino
fvilarino / animiated_drawer_final.kt
Created November 24, 2022 22:56
Animated Drawer - Final
@Stable
interface AnimatedDrawerState {
var density: Float
val drawerWidth: Dp
val drawerTranslationX: Float
val drawerElevation: Float
val backgroundTranslationX: Float
val backgroundAlpha: Float
@fvilarino
fvilarino / shared_app_bar_final.kt
Last active November 3, 2024 12:47
Shared App Bar - Final
val HomeRoute = "home"
val SettingsRoute = "settings"
val ManyOptionsRoute = "manyOptions"
val NoAppBarRoute = "noAppBar"
sealed interface Screen {
val route: String
val isAppBarVisible: Boolean
val navigationIcon: ImageVector?
val navigationIconContentDescription: String?
@fvilarino
fvilarino / ticker_final.kt
Last active October 31, 2024 11:37
Ticker Final
private val TickerCycleMillis = 150
private object AlphabetMapper {
private val Alphabet = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789•".toList()
val size: Int = Alphabet.size
fun getLetterAt(index: Int): Char = Alphabet[index % size]
fun getIndexOf(letter: Char, offset: Int = 0): TickerIndex {
@fvilarino
fvilarino / loading_button_final.kt
Last active September 14, 2024 08:22
Loading Button Final
enum class AnimationType {
Bounce,
LazyBounce,
Fade,
}
private const val NumIndicators = 3
private const val IndicatorSize = 12
private const val BounceAnimationDurationMillis = 300
private const val FadeAnimationDurationMillis = 600
@fvilarino
fvilarino / circular_carousel_14.kt
Created August 5, 2022 05:20
Circular Carousel Final
@fvilarino
fvilarino / container_transform_animation.kt
Created April 26, 2024 02:56
Container Transform - Animation
@Composable
fun MorphingFab(modifier: Modifier = Modifier) {
val users = remember { mutableStateListOf<User>() }
// 1
var showDialog by remember { mutableStateOf(false) }
// 2
SharedTransitionLayout(
modifier = Modifier
.fillMaxSize(),
) {
@fvilarino
fvilarino / container_transform_baseline.kt
Last active April 26, 2024 02:53
Container Transform - Baseline
@Composable
fun MorphingFab(modifier: Modifier = Modifier) {
val users = remember { mutableStateListOf<User>() }
Box(modifier = modifier) {
UserList(
users = users,
modifier = Modifier.fillMaxSize(),
)
InputBox(