Fixed
Status Update
Comments
ro...@t-online.de <ro...@t-online.de> #2
Project: platform/frameworks/support
Branch: androidx-main
Author: Louis Pullen-Freilich <
Link:
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
Expand for full commit details
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
These APIs allow overscroll to have events dispatched to it by one component, and rendered in a separate component.
Fixes: b/266550551
Fixes: b/204650733
Fixes: b/255554340
Fixes: b/229537244
Test: OverscrollTest
Relnote: "Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling APIs - these APIs create a wrapped instance of the provided overscroll effect that doesn't draw / handle events respectively, which allows for rendering overscroll in a separate component from the component that is dispatching events. For example, disabling drawing the overscroll inside a lazy list, and then drawing the overscroll separately on top / elsewhere."
Change-Id: Idbb3d91546b49c1987a041f959bce4b2b09a9f61
Files:
- M
compose/foundation/foundation/api/current.txt
- M
compose/foundation/foundation/api/restricted_current.txt
- M
compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
- M
compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/OverscrollSample.kt
- M
compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/OverscrollTest.kt
- M
compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
Hash: f64e25b7a473c757d080521e7dd97b3f6670f60d
Date: Fri Nov 01 18:43:56 2024
ha...@google.com <ha...@google.com>
ap...@google.com <ap...@google.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-alpha06
androidx.compose.foundation:foundation-android:1.8.0-alpha06
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha06
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-alpha06
ap...@google.com <ap...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 5c108158e6cf2e03dcd4523e9fcf4230514e8a58
Author: Jossi Wolf <jossiwolf@google.com>
Date: Tue Mar 05 17:34:38 2024
Revert "Revert "Changes AnchoredDraggable to operate based on sm..."
Revert submission 2988649-revert-2930845-DMIZVAQUBO
Reason for revert: Re-landing since this doesn't include the API changes
Reverted changes: /q/submissionid:2988649-revert-2930845-DMIZVAQUBO
Relnote: AnchoredDraggable's currentValue will now update when passing through an anchor point. Use settledValue to receive the previous currentValue semantics, only updating when settling at an anchor. The progress is now exposed as a function (requiring a starting and end point) instead of a property.
Test: Existing & refactored tests
Bug: 318707189, 298271489, 294991954
Change-Id: I2ebd3677fd98f0d14f5d365a901cd1b36b0ce9e2
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AnchoredDraggableDemo.kt
M compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AnchoredDraggableSample.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/anchoredDraggable/AnchoredDraggableGestureTest.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/anchoredDraggable/AnchoredDraggableStateTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/AnchoredDraggable.kt
https://android-review.googlesource.com/2989470
Branch: androidx-main
commit 5c108158e6cf2e03dcd4523e9fcf4230514e8a58
Author: Jossi Wolf <jossiwolf@google.com>
Date: Tue Mar 05 17:34:38 2024
Revert "Revert "Changes AnchoredDraggable to operate based on sm..."
Revert submission 2988649-revert-2930845-DMIZVAQUBO
Reason for revert: Re-landing since this doesn't include the API changes
Reverted changes: /q/submissionid:2988649-revert-2930845-DMIZVAQUBO
Relnote: AnchoredDraggable's currentValue will now update when passing through an anchor point. Use settledValue to receive the previous currentValue semantics, only updating when settling at an anchor. The progress is now exposed as a function (requiring a starting and end point) instead of a property.
Test: Existing & refactored tests
Bug: 318707189, 298271489, 294991954
Change-Id: I2ebd3677fd98f0d14f5d365a901cd1b36b0ce9e2
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/AnchoredDraggableDemo.kt
M compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/AnchoredDraggableSample.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/anchoredDraggable/AnchoredDraggableGestureTest.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/anchoredDraggable/AnchoredDraggableStateTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/AnchoredDraggable.kt
Description
Issue
Currently, it is very hard to implement more complex gesture-driven animations.
ConstraintLayout
or other workarounds. It would be nice to have a convenience API to turn these gestures into an animation progess float (or even directly into aTransition
)AnimatedContent
,AnimatedVisibility
or in theTransition
API. I feel like controlling e.g. a crossfade smoothly with a gesture should be very simple.Proposed Solution
Resulting from these considerations, these are the API additions I propose:
AnchoredDraggableState
(instead of onlyoffset
).Something like:
Transition
/AnimatedContent
/etc. but also provide an animation progress (this would probably require to also provide a source state). For Composables likeAnimatedContent
this should probably be a lambda parameter to avoid unncecessary recompositions.AnimatedDraggableState
into a gesture drivenTransition
(or any other way to link those two) since they would really play well together in my opinion.Concrete Use Case
I have a composable that can be in multiple different layout states (concretely: Item containers (lists) that can be collapsed and then slide off screen). These states don't all include the same composables (once the container has been collapsed it doesn't need to compose its items) and have different sizes (the container shrinks when collapsing). Ideally, I would like to use
AnimatedContent
orCrossfade
for the container shrinking and anoffset
modifier to make it slide off screen.Now I want this animation to be powered by a continuous gesture, but it should be possible to stop in the "collapsed but still on-screen" state. So I would like to use an
anchoredDraggable
with three states and define anchors inDp
. TheDp
difference between "collapsed" and "off-screen" would be exactly the width of the collapsed containers in order to have them slide out in sync with the motion of my finger.I imagine something like this: