From 0562a02c7d12606d61ddbaaa8ea54913d1f813b7 Mon Sep 17 00:00:00 2001 From: Anton <73054643+SetrakovAnton@users.noreply.github.com> Date: Wed, 21 Jun 2023 09:25:02 +0300 Subject: [PATCH 1/2] =?UTF-8?q?Feature:=201.=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=83=20=D1=81=20=D0=B1=D0=BB=D1=8E=D1=80=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 + compose/build.gradle | 2 + .../compose/components/blur/BlurPreview.kt | 211 ++++++++++++++++++ core/build.gradle | 2 + sample/build.gradle | 3 + 5 files changed, 220 insertions(+) create mode 100644 compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt diff --git a/build.gradle b/build.gradle index f1964e0..92e9cf7 100644 --- a/build.gradle +++ b/build.gradle @@ -27,6 +27,8 @@ buildscript { billing_version = '5.2.0' calendar_version = '2.3.0' + cloudy_version = '0.1.2' + library_version = '2023.04.00' group_id = 'com.github.purenative.pn-android' } diff --git a/compose/build.gradle b/compose/build.gradle index 821f235..3984af3 100644 --- a/compose/build.gradle +++ b/compose/build.gradle @@ -68,6 +68,8 @@ dependencies { implementation "com.kizitonwose.calendar:compose:$calendar_version" + implementation "com.github.skydoves:cloudy:$cloudy_version" + } publishing { diff --git a/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt b/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt new file mode 100644 index 0000000..78f4a8a --- /dev/null +++ b/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt @@ -0,0 +1,211 @@ +package pn.android.compose.components.blur + +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.animateIntAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.Button +import androidx.compose.material.Slider +import androidx.compose.material.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.skydoves.cloudy.Cloudy + +var radius = 0f + +/** + * Cloudy function can add blur to views in Cloudy content + */ +@Composable +fun BlurExample() { + var radiusValueBySlider by remember { mutableStateOf(0f) } + var key1Value by remember { mutableStateOf(0f) } + var key2Value by remember { mutableStateOf(0f) } + var animationPlayed by remember { mutableStateOf(false) } + val animatedRadius by animateIntAsState( + targetValue = if (animationPlayed) 10 else 0, + animationSpec = tween( + durationMillis = 3000, + delayMillis = 100, + easing = LinearOutSlowInEasing + ) + ) + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black) + .padding(start = 20.dp, end = 20.dp, top = 20.dp) + ) { + Column( + modifier = Modifier.verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.SpaceBetween, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .background(color = Color.White, shape = RoundedCornerShape(12)) + .padding(10.dp) + ) { + Text( + textAlign = TextAlign.Center, + text = "Blur changing by mutableState in radius:", + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + Slider( + modifier = Modifier + .padding(top = 20.dp), + value = radiusValueBySlider, + onValueChange = { value -> radiusValueBySlider = value }, + valueRange = 0f..25f + ) + Cloudy( + modifier = Modifier.padding(top = 20.dp), + radius = castFloatToInt(radiusValueBySlider), + ) { + GradientBlock(modifier = Modifier, text = "Blur 1") + } + } + + Spacer(modifier = Modifier.height(20.dp)) + + Column( + modifier = Modifier + .fillMaxWidth() + .background(color = Color.White, shape = RoundedCornerShape(12)) + .padding(10.dp) + ) { + Text( + textAlign = TextAlign.Center, + text = "Blur changing by key1, key2:", + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(top = 20.dp) + ) { + Button(modifier = Modifier.weight(0.45f), onClick = { + radius = 25f + key1Value++ + }) { + Text( + text = "Changing state by giving key1 parameter(25f radius)", + textAlign = TextAlign.Center, + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + } + Spacer(modifier = Modifier.weight(0.1f)) + Button(modifier = Modifier.weight(0.45f), onClick = { + radius = 5f + key2Value++ + }) { + Text( + text = "Changing state by giving key2 parameter(5f radius)", + textAlign = TextAlign.Center, + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + } + } + Cloudy( + modifier = Modifier.padding(top = 20.dp), + radius = castFloatToInt(radius), + key1 = key1Value, + key2 = key2Value, + ) { + GradientBlock(modifier = Modifier, text = "Blur 2") + } + } + + Spacer(modifier = Modifier.height(20.dp)) + + Column( + modifier = Modifier + .fillMaxWidth() + .background(color = Color.White, shape = RoundedCornerShape(12)) + .padding(10.dp) + ) { + + Text( + textAlign = TextAlign.Center, + text = "Blur changing by allowAccumulate:", + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + + Button(modifier = Modifier.padding(top = 20.dp), onClick = { animationPlayed = true }) { + Text( + textAlign = TextAlign.Center, + text = "Changing state by giving allowAccumulate parameter", + fontSize = 18.sp, + fontWeight = FontWeight.Bold + ) + } + + Cloudy( + modifier = Modifier.padding(top = 20.dp), + radius = animatedRadius, + allowAccumulate = { true } + ) { + GradientBlock(modifier = Modifier, text = "Blur 3") + } + } + } + } +} + +@Composable +private fun GradientBlock(modifier: Modifier, text: String) { + Box( + modifier = modifier + .background( + Brush.horizontalGradient( + listOf( + Color.Red, + Color.Blue + ) + ) + ) + .fillMaxWidth() + .height(50.dp) + ) { + Text( + modifier = Modifier.align(Alignment.Center), + textAlign = TextAlign.Center, + text = text, + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + } +} + +@Composable +@Preview +private fun BlurPreview() { + BlurExample() +} + +private fun castFloatToInt(value: Float): Int { + return try { + value.toInt() + } catch (e: Exception) { + 0 + } +} \ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle index 1c31582..8e93626 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,6 +49,8 @@ dependencies { implementation "com.android.billingclient:billing-ktx:$billing_version" + implementation "com.github.skydoves:cloudy:$cloudy_version" + } publishing { diff --git a/sample/build.gradle b/sample/build.gradle index 33de00d..57d60f6 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -76,4 +76,7 @@ dependencies { implementation "com.google.accompanist:accompanist-pager:$accompanist_version" implementation "com.google.accompanist:accompanist-pager-indicators:$accompanist_version" + implementation "com.github.skydoves:cloudy:$cloudy_version" + + } \ No newline at end of file From b34e5515a6901f6c7d944c647826c823d9992917 Mon Sep 17 00:00:00 2001 From: Anton <73054643+SetrakovAnton@users.noreply.github.com> Date: Wed, 21 Jun 2023 13:34:54 +0300 Subject: [PATCH 2/2] Feature: 1.Add example with jpeg --- .../compose/components/blur/BlurPreview.kt | 63 ++++++++++++++++-- .../src/main/res/drawable/saulgoodman.jpeg | Bin 0 -> 29942 bytes 2 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 compose/src/main/res/drawable/saulgoodman.jpeg diff --git a/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt b/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt index 78f4a8a..b85a2ca 100644 --- a/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt +++ b/compose/src/main/java/pn/android/compose/components/blur/BlurPreview.kt @@ -3,6 +3,7 @@ package pn.android.compose.components.blur import androidx.compose.animation.core.LinearOutSlowInEasing import androidx.compose.animation.core.animateIntAsState import androidx.compose.animation.core.tween +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -16,12 +17,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.skydoves.cloudy.Cloudy +import pn.android.compose.R var radius = 0f @@ -42,6 +45,7 @@ fun BlurExample() { easing = LinearOutSlowInEasing ) ) + val scrollState = rememberScrollState() Box( modifier = Modifier .fillMaxSize() @@ -49,7 +53,9 @@ fun BlurExample() { .padding(start = 20.dp, end = 20.dp, top = 20.dp) ) { Column( - modifier = Modifier.verticalScroll(rememberScrollState()), + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState), verticalArrangement = Arrangement.SpaceBetween, horizontalAlignment = Alignment.CenterHorizontally ) { @@ -76,7 +82,7 @@ fun BlurExample() { modifier = Modifier.padding(top = 20.dp), radius = castFloatToInt(radiusValueBySlider), ) { - GradientBlock(modifier = Modifier, text = "Blur 1") + GradientBlock(text = "Blur 1") } } @@ -130,7 +136,7 @@ fun BlurExample() { key1 = key1Value, key2 = key2Value, ) { - GradientBlock(modifier = Modifier, text = "Blur 2") + GradientBlock(text = "Blur 2") } } @@ -150,7 +156,9 @@ fun BlurExample() { fontWeight = FontWeight.Bold, ) - Button(modifier = Modifier.padding(top = 20.dp), onClick = { animationPlayed = true }) { + Button( + modifier = Modifier.padding(top = 20.dp), + onClick = { animationPlayed = true }) { Text( textAlign = TextAlign.Center, text = "Changing state by giving allowAccumulate parameter", @@ -164,7 +172,50 @@ fun BlurExample() { radius = animatedRadius, allowAccumulate = { true } ) { - GradientBlock(modifier = Modifier, text = "Blur 3") + GradientBlock(text = "Blur 3") + } + } + + Spacer(modifier = Modifier.height(20.dp)) + + Column( + modifier = Modifier + .fillMaxWidth() + .background(color = Color.White, shape = RoundedCornerShape(12)) + .padding(20.dp) + ) { + + Text( + textAlign = TextAlign.Center, + text = "Blur with picture(radius = 10):", + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + ) + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(top = 20.dp), + ) { + + Image( + modifier = Modifier.fillMaxWidth(), + painter = painterResource(id = R.drawable.saulgoodman), + contentDescription = null, + ) + + Spacer(modifier = Modifier.height(15.dp)) + + Cloudy( + radius = 10, + key1 = scrollState + ) { + Image( + modifier = Modifier.fillMaxWidth(), + painter = painterResource(id = R.drawable.saulgoodman), + contentDescription = null, + ) + } } } } @@ -172,7 +223,7 @@ fun BlurExample() { } @Composable -private fun GradientBlock(modifier: Modifier, text: String) { +private fun GradientBlock(modifier: Modifier = Modifier, text: String) { Box( modifier = modifier .background( diff --git a/compose/src/main/res/drawable/saulgoodman.jpeg b/compose/src/main/res/drawable/saulgoodman.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1d588104d9475717d23ee8d712f6a5da5a62bb14 GIT binary patch literal 29942 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 aceyOaV=