Код базовой карточки
This commit is contained in:
@@ -1,10 +1,6 @@
|
|||||||
package ru.megboyzz.dnevnik.screens.ui
|
package ru.megboyzz.dnevnik.screens.ui
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
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.*
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.foundation.*
|
import androidx.compose.foundation.*
|
||||||
@@ -45,12 +41,6 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||||||
import androidx.compose.ui.unit.*
|
import androidx.compose.ui.unit.*
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import androidx.navigation.NavController
|
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 kotlinx.coroutines.launch
|
||||||
import ru.megboyzz.dnevnik.*
|
import ru.megboyzz.dnevnik.*
|
||||||
import ru.megboyzz.dnevnik.R
|
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
|
@Composable
|
||||||
fun LastMarkCard(
|
fun LastMarkCard(
|
||||||
@@ -1164,107 +1296,44 @@ fun CirclePrev() {
|
|||||||
PieChart(list)
|
PieChart(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun PieChart(
|
|
||||||
diagramData: List<PieChartData>
|
|
||||||
) {
|
|
||||||
|
|
||||||
// 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
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
fun GoodPieChartPrev() {
|
fun GoodPieChartPrev() {
|
||||||
Log.i("HUE", "HUE START")
|
|
||||||
val list = listOf(
|
val list = listOf(
|
||||||
PieChartData(legend = "История", value=5),
|
PieChartData(legend = "История", value=5),
|
||||||
PieChartData(legend = "Русский язык", value=4),
|
PieChartData(legend = "Русский язык", value=4),
|
||||||
PieChartData(legend = "Химия", value=1),
|
PieChartData(legend = "Химия", value=1),
|
||||||
PieChartData(legend = "Математика", value=3),
|
PieChartData(legend = "Математика", value=3),
|
||||||
//PieChartData(legend = "Физика", value=10)
|
|
||||||
)
|
)
|
||||||
Log.i("HUE", "HUE END")
|
PieChart(diagramData = list)
|
||||||
GoodPieChart(diagramData = list)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun GoodPieChart(
|
fun PieChart(
|
||||||
diagramData: List<PieChartData>
|
diagramData: List<PieChartData>
|
||||||
) {
|
) {
|
||||||
lateinit var chart: DataPieChart
|
lateinit var chart: DataPieChart
|
||||||
Column {
|
Column {
|
||||||
AndroidView(factory = { context ->
|
AndroidView(
|
||||||
chart = DataPieChart(context)
|
factory = { context ->
|
||||||
chart
|
chart = DataPieChart(context)
|
||||||
},
|
chart
|
||||||
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.wrapContentSize()
|
.wrapContentSize()
|
||||||
.padding(5.dp),
|
.padding(5.dp),
|
||||||
update = { chart.updatePieChartWithData(diagramData) }
|
update = { chart.updatePieChartWithData(diagramData) }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PieChartCard(
|
||||||
|
title: String,
|
||||||
|
data: List<PieChartData>
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,4 +63,6 @@
|
|||||||
<string name="title_next_lesson">The next lesson</string>
|
<string name="title_next_lesson">The next lesson</string>
|
||||||
<string name="title_lesson">Lesson</string>
|
<string name="title_lesson">Lesson</string>
|
||||||
<string name="title_reason">"Reason: "</string>
|
<string name="title_reason">"Reason: "</string>
|
||||||
|
<string name="title_result_mark">Result</string>
|
||||||
|
<string name="title_average_mark">Average</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -62,4 +62,6 @@
|
|||||||
<string name="title_next_lesson">Следующий урок</string>
|
<string name="title_next_lesson">Следующий урок</string>
|
||||||
<string name="title_lesson">Урок</string>
|
<string name="title_lesson">Урок</string>
|
||||||
<string name="title_reason">Причина:</string>
|
<string name="title_reason">Причина:</string>
|
||||||
|
<string name="title_result_mark">Итог</string>
|
||||||
|
<string name="title_average_mark">Ср. балл</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user