Стоян Тинчев
09/10/2021, 12:00 PMFilip Wiesner
09/10/2021, 12:01 PMСтоян Тинчев
09/10/2021, 12:04 PMСтоян Тинчев
09/10/2021, 12:04 PMclass MainActivity : ComponentActivity() {
private lateinit var viewModel: LineViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(LineViewModel::class.java)
viewModel.verticalPosition.watch {
setContent {
JetpackComposeTheme {
Surface(color = MaterialTheme.colors.background) {
Schedule(events = sampleEvents, linePosition = it)
}
}
}
}
}
}
Стоян Тинчев
09/10/2021, 12:05 PM@Composable
fun Schedule(
events: List<Event>,
linePosition: Float,
modifier: Modifier = Modifier,
minDate: LocalDate = LocalDate.now(),
hourHeight: Dp = 128.dp,
) {
val verticalScrollState = rememberScrollState()
val positionedEvents = remember(events) {
arrangeEvents(splitEvents(events.sortedBy(Event::start))).filter {
it.end > LocalTime.MIN && it.start < LocalTime.MAX
}
}
BoxWithConstraints(modifier = modifier) {
Column(modifier = modifier) {
Row(modifier = Modifier.weight(1f)) {
ScheduleSidebar(
hourHeight = hourHeight,
modifier = Modifier
.verticalScroll(verticalScrollState)
.drawBehind {
drawLine(
Color(0xFFEA4336),
start = Offset(
x = 0f,
linePosition * hourHeight.toPx()
),
end = Offset(
size.maxDimension,
linePosition * hourHeight.toPx()
),
strokeWidth = 4.dp.toPx()
)
}.zIndex(1f)
)
EventsLocation(
positionedEvents = positionedEvents, minDate = minDate,
verticalScrollState = verticalScrollState,
)
}
}
}
}
Filip Wiesner
09/10/2021, 12:06 PM