From e98f7203a279a45a55b6de335f67a0cc7c2da425 Mon Sep 17 00:00:00 2001 From: michael Date: Sat, 18 Feb 2023 10:58:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=B4=20=D0=B1=D0=B0=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../megboyzz/dnevnik/screens/ui/Components.kt | 251 +++++++++++------- app/src/main/res/values-en-rUS/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 3 files changed, 164 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt index bb21305..ab85804 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt @@ -1,10 +1,6 @@ package ru.megboyzz.dnevnik.screens.ui import android.annotation.SuppressLint -import android.graphics.Typeface -import android.util.Log -import android.view.ViewGroup -import android.widget.LinearLayout import androidx.compose.animation.* import androidx.compose.animation.core.tween import androidx.compose.foundation.* @@ -45,12 +41,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.* import androidx.compose.ui.viewinterop.AndroidView import androidx.navigation.NavController -import com.github.mikephil.charting.charts.PieChart -import com.github.mikephil.charting.components.Legend -import com.github.mikephil.charting.data.PieData -import com.github.mikephil.charting.data.PieDataSet -import com.github.mikephil.charting.data.PieEntry -import com.github.mikephil.charting.formatter.PercentFormatter import kotlinx.coroutines.launch import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.R @@ -752,6 +742,148 @@ fun SubScreenNavBar( } } +//Базовая карточка для оценок, карточек с диаграммами +@Composable +fun BaseCard( + minWidth: Dp = 300.dp, + //Слой над карточкой + nextLayer: @Composable () -> Unit = {}, + content: @Composable () -> Unit +){ + val shape = RoundedCornerShape(10.dp) + //Расположение слоя регулируется этим алигментом + Box(contentAlignment = Alignment.TopEnd) { + Box( + Modifier + .clip(shape) + .background( + color = white, + shape = shape + ) + .defaultMinSize(minWidth) + .border( + border = BorderStroke( + width = 1.dp, + color = mainBlue, + ), + shape = shape + ) + ) { content() } + nextLayer() + } +} + +@Composable +fun AverageText( + title: String, + mark: String, +) { + Column( + verticalArrangement = Arrangement.spacedBy(2.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = title, + style = Mini, + color = white + ) + Text( + text = mark, + style = MainText, + color = white + ) + } +} + +@Composable +fun CardWithAverage( + averageMark: Float, + resultMark: Float, + minWidth: Dp = 300.dp, + content: @Composable () -> Unit +) { + BaseCard( + minWidth = minWidth, + nextLayer = { + Box( + modifier = Modifier + .size(100.dp, 50.dp) + .background(color = mainBlue, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)), + ){ + Box( + modifier = Modifier.size(50.dp), + contentAlignment = Alignment.Center + ) { + AverageText(title = R.string.title_average_mark.AsString(), mark = averageMark.toString()) + } + } + Box( + modifier = Modifier + .size(50.dp) + .fillMaxSize() + .background(color = totalMarkColor, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)), + contentAlignment = Alignment.Center + ){ + AverageText( + title = R.string.title_result_mark.AsString(), + mark = resultMark.toString() + ) + } + } + ) { content() } +} + + +@Preview +@Composable +fun CardWithAveragePrev() { + CardWithAverage( + averageMark = 4.33f, + resultMark = 4f + ) { + Box(Modifier.padding(10.dp)){ + Text("hehe") + } + } +} + +@Preview +@Composable +fun BaseCardPrev() { + Box( + Modifier + .fillMaxSize() + ){ + Column( + verticalArrangement = Arrangement.spacedBy(10.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 20.dp) + ) { + + Card( + backgroundColor = white, + shape = RoundedCornerShape(10.dp), + border = BorderStroke( + width = 1.dp, + color = mainBlue + ), + modifier = Modifier.defaultMinSize(minWidth = 300.dp) + ) { + Box( + Modifier + .size(50.dp) + .background(Color.Red)){} + } + } + } +} + + @Composable fun LastMarkCard( @@ -1164,107 +1296,44 @@ fun CirclePrev() { PieChart(list) } -@Composable -fun PieChart( - diagramData: List -) { - - // Sum of all the values - val sumOfValues = diagramData.sumOf { it.value } - - // Calculate each proportion value - val proportions = diagramData.map { - it.value.toFloat() / sumOfValues - } - - // Convert each proportions to angle - val sweepAngles = proportions.map { - 360 * it - } - Row(verticalAlignment = Alignment.CenterVertically) { - Canvas( - modifier = Modifier.size(200.dp) - ) { - - var startAngle = -90f - - for (i in sweepAngles.indices) { - drawArc( - color = diagramData[i].color, - startAngle = startAngle, - sweepAngle = sweepAngles[i], - useCenter = true - ) - startAngle += sweepAngles[i] - //draw - } - - } - - Spacer(modifier = Modifier.width(32.dp)) - Column() { - for (data in diagramData) { - DisplayLegend(color = data.color, legend = data.legend) - } - } - } - -} - -@Composable -fun DisplayLegend(color: Color, legend: String) { - - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically - ) { - Divider( - modifier = Modifier.width(16.dp), - thickness = 4.dp, - color = color - ) - - Spacer(modifier = Modifier.width(4.dp)) - - Text( - text = legend, - color = Color.Black - ) - } -} - @Preview @Composable fun GoodPieChartPrev() { - Log.i("HUE", "HUE START") val list = listOf( PieChartData(legend = "История", value=5), PieChartData(legend = "Русский язык", value=4), PieChartData(legend = "Химия", value=1), PieChartData(legend = "Математика", value=3), - //PieChartData(legend = "Физика", value=10) ) - Log.i("HUE", "HUE END") - GoodPieChart(diagramData = list) + PieChart(diagramData = list) } @Composable -fun GoodPieChart( +fun PieChart( diagramData: List ) { lateinit var chart: DataPieChart Column { - AndroidView(factory = { context -> - chart = DataPieChart(context) - chart - }, + AndroidView( + factory = { context -> + chart = DataPieChart(context) + chart + }, modifier = Modifier .wrapContentSize() .padding(5.dp), update = { chart.updatePieChartWithData(diagramData) } ) - - } -} \ No newline at end of file +} + + +@Composable +fun PieChartCard( + title: String, + data: List +) { + +} + diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 882335a..ccf0099 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -63,4 +63,6 @@ The next lesson Lesson "Reason: " + Result + Average \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9f3de5..0e6c02f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,4 +62,6 @@ Следующий урок Урок Причина: + Итог + Ср. балл \ No newline at end of file