Skip to content
This repository was archived by the owner on Dec 9, 2024. It is now read-only.

Commit 77e4183

Browse files
committed
Motion: Use interpolator for predictive back
Change-Id: I8f438fe1aa25dcd452872495dd132ed62fba030e
1 parent f2d19a5 commit 77e4183

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

Motion/app/src/main/java/com/example/android/motion/demo/containertransform/CheeseArticleFragment.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
3131
import androidx.core.view.ViewCompat
3232
import androidx.core.view.ViewGroupCompat
3333
import androidx.core.view.WindowInsetsCompat
34+
import androidx.core.view.animation.PathInterpolatorCompat
3435
import androidx.core.view.updateLayoutParams
3536
import androidx.core.view.updatePadding
3637
import androidx.core.widget.NestedScrollView
@@ -39,8 +40,6 @@ import androidx.fragment.app.viewModels
3940
import androidx.navigation.findNavController
4041
import androidx.navigation.fragment.findNavController
4142
import androidx.navigation.fragment.navArgs
42-
import androidx.transition.ChangeTransform
43-
import androidx.transition.TransitionManager
4443
import com.example.android.motion.R
4544
import com.google.android.material.appbar.CollapsingToolbarLayout
4645
import com.google.android.material.transition.MaterialContainerTransform
@@ -49,14 +48,14 @@ class CheeseArticleFragment : Fragment() {
4948

5049
companion object {
5150
const val TRANSITION_NAME_BACKGROUND = "background"
51+
52+
private val GestureInterpolator = PathInterpolatorCompat.create(0f, 0f, 0f, 1f)
5253
}
5354

5455
private val args: CheeseArticleFragmentArgs by navArgs()
5556

5657
private val viewModel: CheeseArticleViewModel by viewModels()
5758

58-
private val cancelTransition = ChangeTransform()
59-
6059
override fun onCreate(savedInstanceState: Bundle?) {
6160
super.onCreate(savedInstanceState)
6261

@@ -131,11 +130,13 @@ class CheeseArticleFragment : Fragment() {
131130
}
132131

133132
override fun handleOnBackProgressed(backEvent: BackEventCompat) {
134-
val progress = backEvent.progress
133+
val progress = GestureInterpolator.getInterpolation(backEvent.progress)
135134
if (initialTouchY < 0f) {
136135
initialTouchY = backEvent.touchY
137136
}
138-
val progressY = (backEvent.touchY - initialTouchY) / background.height
137+
val progressY = GestureInterpolator.getInterpolation(
138+
(backEvent.touchY - initialTouchY) / background.height
139+
)
139140

140141
// See the motion spec about the calculations below.
141142
// https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back#motion-specs
@@ -156,10 +157,10 @@ class CheeseArticleFragment : Fragment() {
156157
}
157158

158159
override fun handleOnBackCancelled() {
159-
TransitionManager.beginDelayedTransition(background, cancelTransition)
160160
initialTouchY = -1f
161161
background.run {
162162
translationX = 0f
163+
translationY = 0f
163164
scaleX = 1f
164165
scaleY = 1f
165166
}

0 commit comments

Comments
 (0)