компоненты для круговой диаграммы

This commit is contained in:
2023-02-14 23:14:41 +03:00
parent 748a0b77a3
commit 17e2829f35
16 changed files with 401 additions and 72 deletions
+123
View File
@@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>
+5
View File
@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17_PREVIEW" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">
+3
View File
@@ -72,4 +72,7 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.6.4' implementation 'com.squareup.retrofit2:retrofit:2.6.4'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
//Библиотечка для рисования круговых диаграмок
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
} }
+2
View File
@@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="ru.megboyzz.dnevnik"> package="ru.megboyzz.dnevnik">
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
+19 -1
View File
@@ -1,11 +1,15 @@
package ru.megboyzz.dnevnik package ru.megboyzz.dnevnik
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@@ -21,7 +25,8 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.navigation.NavController import androidx.navigation.NavController
import ru.megboyzz.dnevnik.navigation.BaseNavRote import ru.megboyzz.dnevnik.navigation.BaseNavRote
import ru.megboyzz.dnevnik.screens.Month import ru.megboyzz.dnevnik.screens.ui.Month
import ru.megboyzz.dnevnik.ui.theme.dark
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.LocalDate import java.time.LocalDate
import java.time.Year import java.time.Year
@@ -118,3 +123,16 @@ fun getMonthDaysBy(year: Int, month: Month, dayOfWeek: DayOfWeek): List<Int>{
} }
return list return list
} }
@Composable
fun Modifier.mainClickable(
radius: Dp,
onClick: () -> Unit
) = this.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(
radius = radius,
color = dark
),
onClick = onClick
)
@@ -3,7 +3,6 @@ package ru.megboyzz.dnevnik.navigation
import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@@ -13,6 +12,8 @@ import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.screens.* import ru.megboyzz.dnevnik.screens.*
import ru.megboyzz.dnevnik.screens.ui.SubScreenData
import ru.megboyzz.dnevnik.screens.ui.SubScreenNavBar
sealed class MarksNavRoute(override val route: String): BaseNavRote(route){ sealed class MarksNavRoute(override val route: String): BaseNavRote(route){
@@ -6,6 +6,7 @@ import androidx.navigation.NavController
import ru.megboyzz.dnevnik.AsPainter import ru.megboyzz.dnevnik.AsPainter
import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.screens.ui.MainScaffold
@Composable @Composable
fun HomeWorkScreen( fun HomeWorkScreen(
@@ -1,25 +1,11 @@
package ru.megboyzz.dnevnik.screens package ru.megboyzz.dnevnik.screens
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController import androidx.navigation.NavController
import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.SpacerHeight
import ru.megboyzz.dnevnik.SpacerWidth
import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.ui.theme.* import ru.megboyzz.dnevnik.screens.ui.LoginScreenContent
@Composable @Composable
fun LoginScreen(navController: NavController) { fun LoginScreen(navController: NavController) {
@@ -7,6 +7,7 @@ import ru.megboyzz.dnevnik.AsPainter
import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.MarksSubScreenNavHost import ru.megboyzz.dnevnik.navigation.MarksSubScreenNavHost
import ru.megboyzz.dnevnik.screens.ui.MainScaffold
@Composable @Composable
fun MarksScreen( fun MarksScreen(
@@ -6,7 +6,7 @@ import androidx.navigation.NavController
import ru.megboyzz.dnevnik.AsPainter import ru.megboyzz.dnevnik.AsPainter
import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.screens.ui.MainScaffold
@Composable @Composable
fun ScheduleScreen( fun ScheduleScreen(
@@ -1,12 +1,14 @@
package ru.megboyzz.dnevnik.screens package ru.megboyzz.dnevnik.screens.ui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.ColorSpace.Rgb.TransferParameters import android.graphics.Typeface
import android.graphics.Point import android.util.Log
import android.graphics.RectF 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.*
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.selection.toggleable import androidx.compose.foundation.selection.toggleable
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
@@ -17,6 +19,7 @@ import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@@ -29,8 +32,6 @@ import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.RoundRect import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.*
import androidx.compose.ui.graphics.drawscope.DrawStyle
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
@@ -42,7 +43,14 @@ import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview 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.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
@@ -450,11 +458,24 @@ fun DrawerMainButton(
textColor: Color = white, textColor: Color = white,
onClick: () -> Unit = {} onClick: () -> Unit = {}
) { ) {
val interactionSource = MutableInteractionSource()
val coroutineScope = rememberCoroutineScope()
val scale = remember {
androidx.compose.animation.core.Animatable(1f)
}
val animationDuration = 100
val scaleDown = 0.9f
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.height(30.dp) .height(30.dp)
.clickable(onClick = onClick), //TODO Сделать нормальную анимаую клика(не квадратную)
.mainClickable(10.dp, onClick::invoke),
//.clickable(onClick = onClick),
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
Row( Row(
@@ -806,6 +827,19 @@ enum class Month{
} }
@Preview
@Composable
fun CardCalendarPrev() {
Column() {
CardCalendar(month = Month.March, year = 2023){
}
Button(onClick = { /*TODO*/ }) {
Text("hello")
}
}
}
@Composable @Composable
fun CardCalendar( fun CardCalendar(
month: Month, month: Month,
@@ -863,6 +897,8 @@ fun CardCalendar(
val offset = 8 - getMonthDaysBy(year, month, DayOfWeek.MONDAY)[0] val offset = 8 - getMonthDaysBy(year, month, DayOfWeek.MONDAY)[0]
val clicked = mutableListOf<MutableState<Boolean>>()
Row( Row(
horizontalArrangement = Arrangement.SpaceBetween, horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier modifier = Modifier
@@ -870,8 +906,7 @@ fun CardCalendar(
.padding(0.dp, 10.dp, 0.dp, 5.dp) .padding(0.dp, 10.dp, 0.dp, 5.dp)
) { ) {
for(day in DayOfWeek.values()){ for(day in DayOfWeek.values()){
if(day != DayOfWeek.SUNDAY) if(day != DayOfWeek.SUNDAY) Column {
Column {
val list = getMonthDaysBy(year, month, day) val list = getMonthDaysBy(year, month, day)
var len = 0 var len = 0
if(day.ordinal + 1 <= offset && offset !in 6..7){ if(day.ordinal + 1 <= offset && offset !in 6..7){
@@ -881,11 +916,15 @@ fun CardCalendar(
for(i in list.indices){ for(i in list.indices){
val data = list[i] val data = list[i]
val isClicked = remember { mutableStateOf(false) } val isClicked = remember { mutableStateOf(false) }
clicked.add(isClicked)
NumberOnCalendar( NumberOnCalendar(
isClicked = isClicked, isClicked = isClicked,
number = data.toString() number = data.toString()
) { ) {
expanded.value != expanded.value expanded.value != expanded.value
for(click in clicked)
if(click != isClicked)
click.value = false
onClick.invoke(data) onClick.invoke(data)
} }
len++ len++
@@ -932,23 +971,28 @@ fun NumberOnCalendar(
Box( Box(
modifier = Modifier modifier = Modifier
.size(30.dp) .size(30.dp)
.then(isClickedModifier), .clickable(
contentAlignment = Alignment.Center interactionSource = remember { MutableInteractionSource() },
){ indication = rememberRipple(radius = 15.dp, color = dark),
Text( onClick = {
text = number, if (number != "") {
style = H2,
color = dark,
modifier = Modifier.clickable{
if(number != "") {
isClicked.value = !isClicked.value isClicked.value = !isClicked.value
onClick.invoke() onClick.invoke()
} }
} }
) )
.then(isClickedModifier),
contentAlignment = Alignment.Center,
){
Text(
text = number,
style = H2,
color = dark,
)
} }
} }
@Composable @Composable
fun MonthToggle( fun MonthToggle(
startMonth: Month, startMonth: Month,
@@ -1094,47 +1138,133 @@ fun UnderlinedTextPrev() {
* CircleDiagramData(parameterName = "Химия", count=1) = 8% * CircleDiagramData(parameterName = "Химия", count=1) = 8%
* CircleDiagramData(parameterName = "Математика", count=3) = 23% * CircleDiagramData(parameterName = "Математика", count=3) = 23%
*/ */
data class CircleDiagramData( @OptIn(ExperimentalGraphicsApi::class)
val parameterName: String, data class PieChartData(
val count: Int val legend: String,
) val value: Int
){
@Composable val color: Color
fun CircleDiagram( init {
diagramData: List<CircleDiagramData> val hue = (0..360).random(kotlin.random.Random(System.nanoTime())).toFloat()
) { Thread.sleep(10)
color = Color.hsl(hue, 0.5f, 0.6f)
val sum = diagramData.sumOf { it.count }
Canvas(modifier = Modifier.size(100.dp)) {
val canvasWidth = size.width
val canvasHeight = size.height
drawCircle(color = white)
var angle = -45f
var isBlue = true
for(data in diagramData){
val cur = -(360 * data.count.toFloat() / sum.toFloat())
drawArc(
color = if(isBlue) Color.Blue else Color.Red,
startAngle = -angle,
sweepAngle = cur,
useCenter = true,
//style = Stroke(width = 1f, cap = StrokeCap.Round).
)
isBlue = !isBlue
angle -= cur
}
} }
} }
@Preview @Preview
@Composable @Composable
fun CirclePrev() { fun CirclePrev() {
val list = listOf( val list = listOf(
CircleDiagramData(parameterName = "История", count=5), PieChartData(legend = "История", value=5),
CircleDiagramData(parameterName = "Русский язык", count=4), PieChartData(legend = "Русский язык", value=4),
CircleDiagramData(parameterName = "Химия", count=1), PieChartData(legend = "Химия", value=1),
CircleDiagramData(parameterName = "Математика", count=3) PieChartData(legend = "Математика", value=3)
) )
CircleDiagram(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
@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)
}
@Composable
fun GoodPieChart(
diagramData: List<PieChartData>
) {
lateinit var chart: DataPieChart
Column {
AndroidView(factory = { context ->
chart = DataPieChart(context)
chart
},
modifier = Modifier
.wrapContentSize()
.padding(5.dp),
update = { chart.updatePieChartWithData(diagramData) }
)
}
} }
@@ -0,0 +1,59 @@
package ru.megboyzz.dnevnik.screens.ui
import android.content.Context
import android.graphics.Typeface
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
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 ru.megboyzz.dnevnik.ui.theme.MainText
class DataPieChart(context: Context) : PieChart(context) {
init {
layoutParams = LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
)
setUsePercentValues(true)
description.isEnabled = false
isDrawHoleEnabled = false
legend.isEnabled = false
legend.orientation = Legend.LegendOrientation.VERTICAL
legend.horizontalAlignment =
Legend.LegendHorizontalAlignment.CENTER
legend.textSize = 10f
setEntryLabelColor(Color.Black.toArgb())
}
fun updatePieChartWithData(data: List<PieChartData>) {
val entries = data.map { PieEntry(it.value.toFloat(), it.legend) }
val ds = PieDataSet(entries, "")
ds.colors = data.map { it.color.toArgb() }
ds.yValuePosition = PieDataSet.ValuePosition.INSIDE_SLICE
ds.xValuePosition = PieDataSet.ValuePosition.INSIDE_SLICE
ds.sliceSpace = 2f
ds.valueTextColor = Color.Black.toArgb()
ds.valueFormatter = PercentFormatter(this)
ds.valueTextSize = 10f
ds.valueTypeface = Typeface.DEFAULT
this.data = PieData(ds)
invalidate()
}
}
@@ -3,7 +3,7 @@ package ru.megboyzz.dnevnik
import org.junit.Test import org.junit.Test
import org.junit.Assert.* import org.junit.Assert.*
import ru.megboyzz.dnevnik.screens.Month import ru.megboyzz.dnevnik.screens.ui.Month
import java.time.DayOfWeek import java.time.DayOfWeek
class UtilsTest { class UtilsTest {
-1
View File
@@ -8,7 +8,6 @@ plugins {
id 'com.android.library' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
} }
task clean(type: Delete) { task clean(type: Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }
+1
View File
@@ -10,6 +10,7 @@ dependencyResolutionManagement {
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
maven { url 'https://jitpack.io' }
} }
} }
rootProject.name = "MyDnevnik" rootProject.name = "MyDnevnik"