Skip to content

Instantly share code, notes, and snippets.

View sergenes's full-sized avatar
🏠
Working from home

Sergey Neskoromny sergenes

🏠
Working from home
View GitHub Profile
@Composable
fun StudyCardsBottomBar(
index: Int,
count: Int,
side: CardFlipState = CardFlipState.FRONT_FACE,
frontSideColor: Color,
leftActionHandler: (CardFlipState) -> Unit = {},
rightActionHandler: () -> Unit = {}
) {
Row(
val cardWidth = 350.dp
val cardHeight = 380.dp
const val paddingOffset = 32f
const val LOREM_IPSUM_FRONT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
const val LOREM_IPSUM_BACK =
"Integer dolor nisl, finibus eget dignissim sit amet, semper vel ipsum."
@Preview
@Composable
data class StudyCard(
val index: Int,
val frontVal: String,
val backVal: String,
val frontLang: String = "English",
val backLang: String = "English"
)
private val colors = arrayOf(primaryColor, secondaryColor, tertiaryColor)
@Composable
fun StudyCardDeck(
current: Int,
visible: Int,
dataSource: List<StudyCard>
) {
val topCardIdx = 0
val count = dataSource.size
val visibleCards: Int = StrictMath.min(visible, dataSource.size - current)
val data = arrayListOf(
StudyCard(0, "1$LOREM_IPSUM_FRONT", "1$LOREM_IPSUM_BACK"),
StudyCard(1, "2$LOREM_IPSUM_FRONT", "2$LOREM_IPSUM_BACK"),
StudyCard(2, "3$LOREM_IPSUM_FRONT", "3$LOREM_IPSUM_BACK"),
StudyCard(3, "4$LOREM_IPSUM_FRONT", "4$LOREM_IPSUM_BACK"),
StudyCard(4, "5$LOREM_IPSUM_FRONT", "5$LOREM_IPSUM_BACK"),
StudyCard(5, "6$LOREM_IPSUM_FRONT", "6$LOREM_IPSUM_BACK")
)
@Preview
data class FlipCardAnimation(
val peepHandler: () -> Unit
) {
private lateinit var flipState: MutableState<CardFlipState>
private lateinit var scaleXAnimation: State<Float>
private lateinit var scaleYAnimation: State<Float>
@Composable
fun Init() {
flipState = remember { mutableStateOf(CardFlipState.FRONT_FACE) }
data class CardSwipeAnimation(
val model: StudyCardDeckModel,
val cardWidth: Float,
val cardHeight: Float
) {
private lateinit var cardDragOffset: Animatable<Offset, AnimationVector2D>
@Composable
fun Init() {
cardDragOffset = remember {
data class CardsInDeckAnimation(
val paddingOffset: Float,
val count: Int = 3
) {
private lateinit var scaleCards: List<MutableState<Float>>
private lateinit var offsetCards: List<MutableState<Float>>
private fun calculateScale(idx: Int): Float {
return 1f - idx * (1f / 10f)
}
data class StudyCardDeckModel(
var current: Int,
val dataSource: List<StudyCard>,
val visible: Int = 3,
val screenWidth: Int,
val screenHeight: Int
) {
private val colors = arrayOf(primaryColor, secondaryColor, tertiaryColor)
val count = dataSource.size
val visibleCards: Int = StrictMath.min(visible, dataSource.size - current)
data class StudyCardDeckEvents(
val cardWidth: Float,
val cardHeight: Float,
val model: StudyCardDeckModel,
val peepHandler: () -> Unit,
val playHandler: (String, String) -> Unit,
val nextHandler: () -> Unit,
val actionCallback: (String) -> Unit = {}
) {
val cardSwipe: CardSwipeAnimation = CardSwipeAnimation(