Skip to content

Commit b57c74e

Browse files
committed
Remove MaterialContainerTransition. Long live MaterialContainerTransform.
1 parent a4cb34d commit b57c74e

File tree

7 files changed

+27
-457
lines changed

7 files changed

+27
-457
lines changed

Owl/app/src/main/java/com/materialstudies/owl/ui/featured/FeaturedFragment.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.core.view.doOnNextLayout
2424
import androidx.fragment.app.Fragment
2525
import androidx.navigation.findNavController
2626
import androidx.navigation.fragment.FragmentNavigatorExtras
27+
import com.google.android.material.transition.Hold
2728
import com.materialstudies.owl.databinding.FragmentFeaturedBinding
2829
import com.materialstudies.owl.model.CourseId
2930
import com.materialstudies.owl.model.courses
@@ -47,17 +48,16 @@ class FeaturedFragment : Fragment() {
4748
view to "shared_element"
4849
)
4950
val action = FeaturedFragmentDirections.actionFeaturedToLearn(courseId)
50-
/* awaiting aosp/987385 in fragment 1.2.0-alpha02
51-
exitTransition = Recede().apply {
51+
exitTransition = Hold().apply {
5252
addTarget(root)
5353
excludeTarget(view, true)
54-
duration = 300L
55-
}*/
54+
duration = 300L
55+
}
5656
view.findNavController().navigate(action, extras)
5757
}
5858
}
5959
featuredGrid.apply {
60-
itemAnimator = SpringAddItemAnimator()
60+
//itemAnimator = SpringAddItemAnimator()
6161
adapter = FeaturedAdapter(onClick).apply {
6262
// add data after layout so that animations run
6363
doOnNextLayout {

Owl/app/src/main/java/com/materialstudies/owl/ui/learn/LearnFragment.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ import android.view.animation.AnimationUtils
2424
import androidx.fragment.app.Fragment
2525
import androidx.navigation.fragment.findNavController
2626
import androidx.navigation.fragment.navArgs
27+
import com.google.android.material.transition.MaterialArcMotion
28+
import com.google.android.material.transition.MaterialContainerTransform
29+
import com.google.android.material.transition.MaterialContainerTransform.FADE_MODE_THROUGH
2730
import com.materialstudies.owl.R
2831
import com.materialstudies.owl.databinding.FragmentLearnBinding
2932
import com.materialstudies.owl.model.CourseRepo
3033
import com.materialstudies.owl.model.courses
3134
import com.materialstudies.owl.ui.lessons.LessonsSheetFragment
32-
import com.materialstudies.owl.util.transition.DiagonalSlide
33-
import com.materialstudies.owl.util.transition.MaterialContainerTransition
3435
import com.materialstudies.owl.util.loadListener
36+
import com.materialstudies.owl.util.themeColor
37+
import com.materialstudies.owl.util.transition.DiagonalSlide
3538
import java.util.concurrent.TimeUnit
3639

3740
/**
@@ -67,7 +70,12 @@ class LearnFragment : Fragment() {
6770
context,
6871
android.R.interpolator.fast_out_slow_in
6972
)
70-
sharedElementEnterTransition = MaterialContainerTransition(R.id.scroll).apply {
73+
val containerColor = requireContext().themeColor(R.attr.colorSurface)
74+
sharedElementEnterTransition = MaterialContainerTransform(requireContext()).apply {
75+
drawingViewId = R.id.nav_host
76+
this.containerColor = containerColor
77+
pathMotion = MaterialArcMotion()
78+
fadeMode = FADE_MODE_THROUGH
7179
duration = 400L
7280
interpolator = interp
7381
}
@@ -77,7 +85,11 @@ class LearnFragment : Fragment() {
7785
duration = 200L
7886
interpolator = interp
7987
}
80-
sharedElementReturnTransition = MaterialContainerTransition().apply {
88+
sharedElementReturnTransition = MaterialContainerTransform(requireContext()).apply {
89+
drawingViewId = R.id.nav_host
90+
fadeMode = FADE_MODE_THROUGH
91+
this.containerColor = containerColor
92+
pathMotion = MaterialArcMotion()
8193
duration = 300L
8294
interpolator = interp
8395
}

Owl/app/src/main/java/com/materialstudies/owl/ui/mycourses/MyCoursesFragment.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import androidx.annotation.Px
2222
import androidx.core.view.doOnNextLayout
2323
import androidx.fragment.app.Fragment
2424
import androidx.recyclerview.widget.RecyclerView
25+
import com.google.android.material.transition.Hold
2526
import com.materialstudies.owl.R
2627
import com.materialstudies.owl.databinding.FragmentMyCoursesBinding
2728
import com.materialstudies.owl.model.courses
@@ -37,7 +38,7 @@ class MyCoursesFragment : Fragment() {
3738
): View {
3839
val binding = FragmentMyCoursesBinding.inflate(inflater, container, false).apply {
3940
list.apply {
40-
itemAnimator = SpringAddItemAnimator()
41+
//itemAnimator = SpringAddItemAnimator()
4142
addItemDecoration(
4243
BottomSpacingItemDecoration(resources.getDimensionPixelSize(R.dimen.grid_2))
4344
)
@@ -53,6 +54,7 @@ class MyCoursesFragment : Fragment() {
5354
}
5455
}
5556
postponeEnterTransition(1000L, TimeUnit.MILLISECONDS)
57+
exitTransition = Hold()
5658
return binding.root
5759
}
5860
}

Owl/app/src/main/java/com/materialstudies/owl/util/ViewExtensions.kt

Lines changed: 1 addition & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,19 @@ package com.materialstudies.owl.util
1818

1919
import android.animation.ValueAnimator
2020
import android.content.Context
21-
import android.graphics.Bitmap
22-
import android.graphics.Bitmap.Config.ARGB_8888
2321
import android.graphics.Color
2422
import android.graphics.drawable.BitmapDrawable
2523
import android.graphics.drawable.ColorDrawable
2624
import android.view.View
27-
import android.view.View.GONE
28-
import android.view.View.MeasureSpec
29-
import android.view.View.VISIBLE
25+
import android.view.View.*
3026
import android.view.ViewGroup
3127
import android.view.animation.AnimationUtils
3228
import androidx.annotation.AttrRes
3329
import androidx.annotation.ColorInt
3430
import androidx.annotation.IdRes
35-
import androidx.annotation.Px
3631
import androidx.core.animation.doOnEnd
3732
import androidx.core.content.res.use
38-
import androidx.core.graphics.applyCanvas
39-
import androidx.core.view.ViewCompat
4033
import androidx.core.view.drawToBitmap
41-
import androidx.core.view.forEach
4234
import androidx.dynamicanimation.animation.DynamicAnimation.ViewProperty
4335
import androidx.dynamicanimation.animation.SpringAnimation
4436
import androidx.dynamicanimation.animation.SpringForce
@@ -108,42 +100,6 @@ fun Context.themeColor(
108100
}
109101
}
110102

111-
/**
112-
* Search this view and any children for a [ColorDrawable] `background` and return it's `color`,
113-
* else return `colorSurface`.
114-
*/
115-
@ColorInt
116-
fun View.descendantBackgroundColor(): Int {
117-
val bg = backgroundColor()
118-
if (bg != null) {
119-
return bg
120-
} else if (this is ViewGroup) {
121-
forEach {
122-
val childBg = descendantBackgroundColorOrNull()
123-
if (childBg != null) {
124-
return childBg
125-
}
126-
}
127-
}
128-
return context.themeColor(android.R.attr.colorBackground)
129-
}
130-
131-
@ColorInt
132-
private fun View.descendantBackgroundColorOrNull(): Int? {
133-
val bg = backgroundColor()
134-
if (bg != null) {
135-
return bg
136-
} else if (this is ViewGroup) {
137-
forEach {
138-
val childBg = backgroundColor()
139-
if (childBg != null) {
140-
return childBg
141-
}
142-
}
143-
}
144-
return null
145-
}
146-
147103
/**
148104
* Check if this [View]'s `background` is a [ColorDrawable] and if so, return it's `color`,
149105
* otherwise `null`.
@@ -157,17 +113,6 @@ fun View.backgroundColor(): Int? {
157113
return null
158114
}
159115

160-
/**
161-
* Walk up from a [View] looking for an ancestor with a given `id`.
162-
*/
163-
fun View.findAncestorById(@IdRes ancestorId: Int): View {
164-
return when {
165-
id == ancestorId -> this
166-
parent is View -> (parent as View).findAncestorById(ancestorId)
167-
else -> throw IllegalArgumentException("$ancestorId not a valid ancestor")
168-
}
169-
}
170-
171116
/**
172117
* Potentially animate showing a [BottomNavigationView].
173118
*
@@ -247,18 +192,3 @@ fun BottomNavigationView.hide() {
247192
start()
248193
}
249194
}
250-
251-
/**
252-
* A copy of the KTX method, adding the ability to add extra padding the bottom of the [Bitmap];
253-
* useful when it will be used in a [android.graphics.BitmapShader][BitmapShader] with
254-
* a [android.graphics.Shader.TileMode.CLAMP][CLAMP tile mode].
255-
*/
256-
fun View.drawToBitmap(@Px extraPaddingBottom: Int = 0): Bitmap {
257-
if (!ViewCompat.isLaidOut(this)) {
258-
throw IllegalStateException("View needs to be laid out before calling drawToBitmap()")
259-
}
260-
return Bitmap.createBitmap(width, height + extraPaddingBottom, ARGB_8888).applyCanvas {
261-
translate(-scrollX.toFloat(), -scrollY.toFloat())
262-
draw(this)
263-
}
264-
}

Owl/app/src/main/java/com/materialstudies/owl/util/transition/DiagonalSlide.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ package com.materialstudies.owl.util.transition
1818

1919
import android.animation.ObjectAnimator
2020
import android.animation.PropertyValuesHolder
21+
import android.transition.TransitionValues
22+
import android.transition.Visibility
2123
import android.view.View
2224
import android.view.ViewGroup
2325
import androidx.core.animation.doOnEnd
24-
import androidx.transition.TransitionValues
25-
import androidx.transition.Visibility
2626

2727
/**
2828
* A [androidx.transition.Transition] which animates visibility changes by sliding in/out diagonally

0 commit comments

Comments
 (0)