Sentuh Animasi Umpan Balik seperti Spotify di Jetpack Compose
May 04 2023
Membuat Efek Klik Memantul di Jetpack Compose
Sangat penting untuk menunjukkan umpan balik klik pengguna bla bla bal, Singkat cerita, saya lebih suka efek klik memantul Spotify daripada efek Ripple default, jadi mari kita lakukan Sepanjang jalan, kita akan menjelajahi beberapa pengubah dan animasi juga… Untuk melakukannya kita akan melakukannya buat Pengubah yang dapat digunakan kembali (mirip dengan pengubah yang dapat diklik) yang mengurangi skala dan opacity saat elemen UI ditekan. Saya akan melanjutkan dan meletakkan semua kode lalu menjelaskannya… Itu saja, mari kita gunakan Itu saja, saya harap kamu menyukai blognya ❤️.

Sangat penting untuk menunjukkan umpan balik klik pengguna bla bla bal, Singkat cerita, saya lebih suka efek klik pantulan Spotify daripada efek Ripple default, jadi mari kita lakukan
Sepanjang jalan, kita akan menjelajahi beberapa pengubah dan animasi juga…

Untuk melakukannya, kita akan membuat pengubah yang dapat digunakan kembali Modifier
(mirip dengan pengubah yang dapat diklik) yang mengurangi skala dan opasitas saat elemen UI ditekan.
Saya akan melanjutkan dan meletakkan semua kode dan kemudian menjelaskannya…
/**
* Adds a bouncing click effect to a Composable.
*
* @param enabled whether the UI element should be enabled and clickable
* @param onClick the action to perform when the UI element is clicked
*/
fun Modifier.bouncingClickable(
enabled: Boolean = true,
onClick: () -> Unit
) = composed {
val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
val animationTransition = updateTransition(isPressed, label = "BouncingClickableTransition")
val scaleFactor by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.94f else 1f },
label = "BouncingClickableScaleFactorTransition",
)
val opacity by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.7f else 1f },
label = "BouncingClickableOpacityTransition"
)
this
.graphicsLayer {
this.scaleX = scaleFactor
this.scaleY = scaleFactor
this.alpha = opacity
}
.clickable(
interactionSource = interactionSource,
indication = null,
enabled = enabled,
onClick = onClick
)
}
- Kemudian karena kami memiliki banyak animasi yang ingin kami jalankan kapan
isPressed == true
, kami menggunakanupdateTransition()
yang memberi kami fungsi ekstensi untuk menjalankan banyak animasi. - Untuk membuat animasi, kami menggunakan
animateFloat()
ekstensi untuk membuat dua animasi, satu untukscaleFactor
dan satu untukopacity
yang akan kami gunakan untuk menganimasikan elemen UI kami. - Untuk mengubah skala & alfa kami menggunakan
graphicsLayer
Pengubah yang biasanya digunakan untuk menerapkan transformasi dan animasi ke elemen UI. ( lihat artikel bagus ini untuk mempelajari lebih lanjut ) - Terakhir, kami menambahkan pengubah yang dapat diklik untuk menangani klik dan menghapus efek riak default dengan menyetel
indication
param kenull
Itu dia, mari kita gunakan
Box(
modifier = Modifier
.bouncingClickable {
println("Clicked...")
}
.size(100.dp)
.clip(CircleShape)
.background(Color.Black)
) {}
val scaleFactor by animationTransition.animateFloat(
targetValueByState = { pressed -> if (pressed) 0.94f else 1f },
label = "BouncingClickableScaleFactorTransition",
transitionSpec = {
spring(
dampingRatio = Spring.DampingRatioMediumBouncy,
stiffness = Spring.StiffnessLow
)
}
)
Itu saja, saya harap Anda menyukai blog ini ❤️
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'