Add DSB Zoom
Minor changes PSE
This commit is contained in:
@@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.gestures.detectTransformGestures
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@@ -12,8 +13,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.ArrowBack
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
@@ -25,13 +25,22 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.graphics.graphicsLayer
|
||||
import androidx.compose.ui.input.pointer.pointerInput
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.zIndex
|
||||
import com.schoolapp.cleverclass.ui.theme.CleverClassTheme
|
||||
import org.json.JSONObject
|
||||
import java.io.File
|
||||
import java.lang.Float.max
|
||||
import java.lang.Float.min
|
||||
|
||||
private lateinit var folder : File
|
||||
private lateinit var information : JSONObject
|
||||
@@ -64,6 +73,10 @@ class DSBDayViewActivity : ComponentActivity() {
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun DSBDayViewContent(activity: ComponentActivity){
|
||||
var scale by remember { mutableStateOf(1f) }
|
||||
var XOffset by remember { mutableStateOf(0f) }
|
||||
var YOffset by remember { mutableStateOf(0f) }
|
||||
|
||||
Column{
|
||||
TopAppBar(
|
||||
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(MaterialTheme.colorScheme.primaryContainer),
|
||||
@@ -83,24 +96,43 @@ fun DSBDayViewContent(activity: ComponentActivity){
|
||||
)
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.zIndex(1f)
|
||||
)
|
||||
|
||||
val imageFiles = folder.listFiles { file -> file.extension == "jpg" }?.toList()
|
||||
|
||||
Column(
|
||||
LazyColumn(
|
||||
userScrollEnabled = true,
|
||||
modifier = Modifier
|
||||
.padding(8.dp)
|
||||
.verticalScroll(rememberScrollState())
|
||||
.pointerInput(Unit) {
|
||||
detectTransformGestures { _, move, zoom, _ ->
|
||||
scale = max(min(zoom * scale, 2f), 1f)
|
||||
val maxXOffset = 520 * (scale - 1)
|
||||
val maxYOffset = 992 * (scale - 1)
|
||||
XOffset = max(min(XOffset + move.x, maxXOffset), -maxXOffset)
|
||||
YOffset = max(min(YOffset + move.y, maxYOffset), -maxYOffset)
|
||||
}
|
||||
}
|
||||
.graphicsLayer(
|
||||
scaleX = scale,
|
||||
scaleY = scale,
|
||||
translationX = XOffset,
|
||||
translationY = YOffset
|
||||
)
|
||||
) {
|
||||
imageFiles?.forEach {
|
||||
Image(
|
||||
bitmap = BitmapFactory.decodeFile(it.absolutePath).asImageBitmap(),
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
item {
|
||||
Image(
|
||||
bitmap = BitmapFactory.decodeFile(it.absolutePath).asImageBitmap(),
|
||||
contentDescription = null,
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,6 +79,7 @@ fun PSEContent(activity: ComponentActivity){
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var rootObj : JSONObject
|
||||
|
||||
private val colors = listOf(
|
||||
Color(0xFFBCA76D),
|
||||
@@ -117,7 +118,7 @@ private val elementButtonColors = listOf(
|
||||
@Composable
|
||||
fun PSEMainContent(activity: ComponentActivity) {
|
||||
val inputStream = activity.assets.open("elements_data.json")
|
||||
val rootObj = JSONObject(InputStreamReader(inputStream).readText())
|
||||
rootObj = JSONObject(InputStreamReader(inputStream).readText())
|
||||
|
||||
var showInfo by remember {
|
||||
mutableStateOf(false)
|
||||
@@ -204,7 +205,7 @@ fun PSEMainContent(activity: ComponentActivity) {
|
||||
modifier = Modifier
|
||||
.verticalScroll(rememberScrollState())
|
||||
.horizontalScroll(rememberScrollState()),
|
||||
text = readElementData(rootObj, dcValue),
|
||||
text = readElementData(dcValue),
|
||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||
style = MaterialTheme.typography.labelMedium
|
||||
)
|
||||
@@ -293,8 +294,8 @@ fun InformationBox(text: String, color: Color){
|
||||
}
|
||||
}
|
||||
|
||||
private fun readElementData(jsonObject: JSONObject, int: Int): String {
|
||||
val elementData = jsonObject.getJSONArray("elements").getJSONObject(int)
|
||||
private fun readElementData(int: Int): String {
|
||||
val elementData = rootObj.getJSONArray("elements").getJSONObject(int)
|
||||
return "Name:\n${elementData.get("Name")}\n\n" +
|
||||
"Ordnungszahl:\n${elementData.get("Ordnungszahl")}\n\n" +
|
||||
"Gruppe:\n${elementData.get("Gruppe")}\n\n" +
|
||||
|
||||
Reference in New Issue
Block a user