From e1631c044d49278ff328bddc4f9b2d9c5ed1de64 Mon Sep 17 00:00:00 2001 From: dmail Date: Wed, 11 Sep 2024 15:40:25 -0700 Subject: [PATCH 1/3] Adds snippet for the "Create a parallax scrolling effect" doc at https://developer.android.com/quick-guides/content/parallax-scrolling?hl=en --- .../compose/snippets/images/ParallaxEffect.kt | 57 +++++++++++++++++++ .../snippets/src/main/res/values/strings.xml | 1 + 2 files changed, 58 insertions(+) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt b/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt index 7c58cd7d..07226a6d 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt @@ -1,2 +1,59 @@ package com.example.compose.snippets.images +import androidx.compose.foundation.Image +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.layout +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.example.compose.snippets.R + +// [START android_compose_images_parallax] +@Composable +fun ParallaxEffect() +{ + fun Modifier.parallaxLayoutModifier(scrollState: ScrollState, rate: Int) = + layout { measurable, constraints -> + val placeable = measurable.measure(constraints) + val height = if (rate > 0) scrollState.value / rate else scrollState.value + layout(placeable.width, placeable.height) { + placeable.place(0, height) + } + } + + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(scrollState), + ) { + + Image( + painterResource(id = R.drawable.cupcake), + contentDescription = "Android logo", + contentScale = ContentScale.Fit, + // Reduce scrolling rate by half. + modifier = Modifier.parallaxLayoutModifier(scrollState, 2) + ) + + Text( + text = stringResource(R.string.detail_placeholder), + modifier = Modifier + .background(Color.White) + .padding(horizontal = 8.dp), + + ) + } +} +// [END android_compose_images_parallax] \ No newline at end of file diff --git a/compose/snippets/src/main/res/values/strings.xml b/compose/snippets/src/main/res/values/strings.xml index 9c693caf..faf8fd47 100644 --- a/compose/snippets/src/main/res/values/strings.xml +++ b/compose/snippets/src/main/res/values/strings.xml @@ -52,4 +52,5 @@ Favorites Shopping Profile + This is just a placeholder. \ No newline at end of file From e6d69f4430ecbf47d614f488a343bd5e529a227c Mon Sep 17 00:00:00 2001 From: thedmail Date: Wed, 11 Sep 2024 22:44:31 +0000 Subject: [PATCH 2/3] Apply Spotless --- .../compose/snippets/images/ParallaxEffect.kt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt b/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt index 07226a6d..3f5fd252 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/images/ParallaxEffect.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.compose.snippets.images import androidx.compose.foundation.Image @@ -21,8 +37,7 @@ import com.example.compose.snippets.R // [START android_compose_images_parallax] @Composable -fun ParallaxEffect() -{ +fun ParallaxEffect() { fun Modifier.parallaxLayoutModifier(scrollState: ScrollState, rate: Int) = layout { measurable, constraints -> val placeable = measurable.measure(constraints) @@ -53,7 +68,7 @@ fun ParallaxEffect() .background(Color.White) .padding(horizontal = 8.dp), - ) + ) } } -// [END android_compose_images_parallax] \ No newline at end of file +// [END android_compose_images_parallax] From f2c60304282dbbf64e19237366cc8aa4e0d9e6ff Mon Sep 17 00:00:00 2001 From: dmail Date: Wed, 11 Sep 2024 15:58:00 -0700 Subject: [PATCH 3/3] Adds snippet for the "Create a parallax scrolling effect" doc at https://developer.android.com/quick-guides/content/parallax-scrolling?hl=en --- compose/snippets/src/main/res/values-es/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/compose/snippets/src/main/res/values-es/strings.xml b/compose/snippets/src/main/res/values-es/strings.xml index cd1e2c96..3ba327f4 100644 --- a/compose/snippets/src/main/res/values-es/strings.xml +++ b/compose/snippets/src/main/res/values-es/strings.xml @@ -52,4 +52,5 @@ Favoritos Compras Perfil + Esto es sólo un texto de marcador de posición. \ No newline at end of file