Skip to content

Commit 9cfc465

Browse files
add Activity transition sample
1 parent 57580ac commit 9cfc465

File tree

17 files changed

+238
-7
lines changed

17 files changed

+238
-7
lines changed

Tutorial2-1AnimatedVectorDrawables/src/main/java/com/smarttoolfactory/tutorial2_1animatedvectordrawables/Activity1_1Basics.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Activity1_1Basics : AppCompatActivity() {
2121
setContentView(R.layout.activity1_1basics)
2222
title = getString(R.string.activity1_1)
2323

24-
val dataList = getVectorDrawableItemList()
24+
val dataList:List<Any> = getVectorDrawableItemList()
2525

2626
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
2727

Tutorial2-1AnimatedVectorDrawables/src/main/java/com/smarttoolfactory/tutorial2_1animatedvectordrawables/adapter/itemdecoration/GridSpacingItemDecoration.kt

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class GridSpacingItemDecoration(
3636
return
3737
}
3838

39+
// After scroll check for the closest header above this position
3940
if (headerPositions.isEmpty()) {
4041
headerPosition = -1
4142
} else {

Tutorial3-1Transitions/src/main/AndroidManifest.xml

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<category android:name="android.intent.category.LAUNCHER" />
1717
</intent-filter>
1818
</activity>
19+
<activity android:name=".chapter1_basics.Activity1_1Basics" />
20+
<activity android:name=".chapter1_basics.Activity1_1DetailPage" />
1921
</application>
2022

2123
</manifest>

Tutorial3-1Transitions/src/main/java/com/smarttoolfactory/tutorial3_1transitions/MainActivity.kt

+7-6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
1010
import com.smarttoolfactory.tutorial3_1transitions.adapter.BaseAdapter
1111
import com.smarttoolfactory.tutorial3_1transitions.adapter.ChapterSelectionAdapter
1212
import com.smarttoolfactory.tutorial3_1transitions.adapter.model.ActivityClassModel
13+
import com.smarttoolfactory.tutorial3_1transitions.chapter1_basics.Activity1_1Basics
1314
import com.smarttoolfactory.tutorial3_1transitions.databinding.ActivityMainBinding
1415
import java.util.ArrayList
1516

@@ -55,12 +56,12 @@ class MainActivity : AppCompatActivity(), BaseAdapter.OnRecyclerViewItemClickLis
5556
private fun addChapters() {
5657

5758
// Add Activities to list to be displayed on RecyclerView
58-
// activityClassModels.add(
59-
// ActivityClassModel(
60-
// Activity1_1Basics::class.java,
61-
// getString(R.string.activity1_1)
62-
// )
63-
// )
59+
activityClassModels.add(
60+
ActivityClassModel(
61+
Activity1_1Basics::class.java,
62+
getString(R.string.activity1_1)
63+
)
64+
)
6465

6566

6667
}

Tutorial3-1Transitions/src/main/java/com/smarttoolfactory/tutorial3_1transitions/adapter/ChapterSelectionAdapter.kt

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.smarttoolfactory.tutorial3_1transitions.adapter
22

3+
import com.smarttoolfactory.tutorial3_1transitions.R
34
import com.smarttoolfactory.tutorial3_1transitions.adapter.model.ActivityClassModel
45

56

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.smarttoolfactory.tutorial3_1transitions.adapter.model
2+
3+
import android.os.Parcelable
4+
import kotlinx.android.parcel.Parcelize
5+
6+
@Parcelize
7+
data class Post(
8+
val id: Int,
9+
val userId: Int,
10+
val title: String,
11+
val body: String
12+
) : Parcelable
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.smarttoolfactory.tutorial3_1transitions.chapter1_basics
2+
3+
import android.app.ActivityOptions
4+
import android.content.Intent
5+
import android.os.Bundle
6+
import androidx.appcompat.app.AppCompatActivity
7+
import androidx.core.view.ViewCompat
8+
import com.smarttoolfactory.tutorial3_1transitions.R
9+
import kotlinx.android.synthetic.main.activity1_1basics.*
10+
11+
class Activity1_1Basics : AppCompatActivity() {
12+
13+
override fun onCreate(savedInstanceState: Bundle?) {
14+
super.onCreate(savedInstanceState)
15+
setContentView(R.layout.activity1_1basics)
16+
title = getString(R.string.activity1_1)
17+
18+
val imageRes = R.drawable.avatar_1_raster
19+
ivAvatar.setImageResource(imageRes)
20+
21+
cardView.setOnClickListener {
22+
val intent = Intent(this, Activity1_1DetailPage::class.java)
23+
intent.putExtra("imageRes", imageRes)
24+
25+
// create the transition animation - the images in the layouts
26+
// of both activities are defined with android:transitionName="robot"
27+
val options = ActivityOptions
28+
.makeSceneTransitionAnimation(
29+
this,
30+
ivAvatar,
31+
ViewCompat.getTransitionName(ivAvatar)
32+
)
33+
// start the new activity
34+
startActivity(intent, options.toBundle())
35+
}
36+
37+
}
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.smarttoolfactory.tutorial3_1transitions.chapter1_basics
2+
3+
import android.os.Bundle
4+
import android.transition.Fade
5+
import android.transition.Transition
6+
import android.view.View
7+
import androidx.appcompat.app.AppCompatActivity
8+
import com.smarttoolfactory.tutorial3_1transitions.R
9+
import kotlinx.android.synthetic.main.activity1_1details.*
10+
11+
12+
class Activity1_1DetailPage : AppCompatActivity() {
13+
14+
override fun onCreate(savedInstanceState: Bundle?) {
15+
super.onCreate(savedInstanceState)
16+
setContentView(R.layout.activity1_1details)
17+
val imageRes = intent.getIntExtra("imageRes", -1)
18+
if (imageRes != -1) {
19+
ivImage.setImageResource(imageRes)
20+
}
21+
22+
23+
// 🔥 Prevents status bar blinking issue
24+
val fade: Transition = Fade()
25+
val decor = window.decorView
26+
27+
val view = decor.findViewById<View>(R.id.action_bar_container)
28+
fade.excludeTarget(view, true)
29+
fade.excludeTarget(android.R.id.statusBarBackground, true)
30+
fade.excludeTarget(android.R.id.navigationBarBackground, true)
31+
window.enterTransition = fade
32+
window.exitTransition = fade
33+
34+
}
35+
}
Loading
Loading
Loading
Loading
Loading
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
android:background="#dce6f1">
8+
9+
<com.google.android.material.card.MaterialCardView
10+
android:id="@+id/cardView"
11+
android:layout_width="match_parent"
12+
android:layout_height="wrap_content"
13+
android:layout_margin="16dp"
14+
android:background="@color/white"
15+
android:padding="16dp"
16+
app:cardCornerRadius="5dp"
17+
app:cardElevation="5dp"
18+
app:layout_constraintBottom_toBottomOf="parent"
19+
app:layout_constraintEnd_toEndOf="parent"
20+
app:layout_constraintStart_toStartOf="parent"
21+
app:layout_constraintTop_toTopOf="parent">
22+
23+
<androidx.constraintlayout.widget.ConstraintLayout
24+
android:layout_width="match_parent"
25+
android:layout_height="wrap_content">
26+
27+
<androidx.appcompat.widget.AppCompatImageView
28+
android:id="@+id/ivAvatar"
29+
android:layout_width="80dp"
30+
android:layout_height="80dp"
31+
android:layout_marginStart="8dp"
32+
android:layout_marginTop="8dp"
33+
android:layout_marginBottom="8dp"
34+
android:src="@drawable/avatar_1_raster"
35+
android:transitionName="ivAvatar"
36+
app:layout_constraintBottom_toBottomOf="parent"
37+
app:layout_constraintStart_toStartOf="parent"
38+
app:layout_constraintTop_toTopOf="parent" />
39+
40+
<TextView
41+
android:id="@+id/tvTitle"
42+
android:layout_width="wrap_content"
43+
android:layout_height="wrap_content"
44+
android:layout_marginStart="12dp"
45+
android:layout_marginTop="8dp"
46+
android:text="Some Title"
47+
android:textSize="24sp"
48+
android:textStyle="bold"
49+
app:layout_constraintStart_toEndOf="@+id/ivAvatar"
50+
app:layout_constraintTop_toTopOf="parent" />
51+
52+
<TextView
53+
android:id="@+id/tvContext"
54+
android:layout_width="0dp"
55+
android:layout_height="wrap_content"
56+
android:layout_marginStart="32dp"
57+
android:layout_marginTop="8dp"
58+
android:maxLines="2"
59+
android:text="@string/bacon_ipsum_short"
60+
app:layout_constraintStart_toEndOf="@+id/ivAvatar"
61+
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
62+
63+
</androidx.constraintlayout.widget.ConstraintLayout>
64+
</com.google.android.material.card.MaterialCardView>
65+
66+
<com.google.android.material.textview.MaterialTextView
67+
android:layout_width="wrap_content"
68+
android:layout_height="wrap_content"
69+
android:text="Click card to open details"
70+
android:textSize="18sp"
71+
app:layout_constraintBottom_toBottomOf="parent"
72+
app:layout_constraintEnd_toEndOf="parent"
73+
app:layout_constraintStart_toStartOf="parent"
74+
app:layout_constraintTop_toBottomOf="@id/cardView"
75+
app:layout_constraintVertical_bias="0.2" />
76+
77+
</androidx.constraintlayout.widget.ConstraintLayout>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
xmlns:tools="http://schemas.android.com/tools">
7+
8+
<ImageView
9+
android:id="@+id/ivImage"
10+
android:layout_width="match_parent"
11+
android:layout_height="0dp"
12+
android:transitionName="ivAvatar"
13+
app:layout_constraintDimensionRatio="4:3"
14+
app:layout_constraintEnd_toEndOf="parent"
15+
app:layout_constraintStart_toStartOf="parent"
16+
android:src="@drawable/avatar_2_raster"
17+
app:layout_constraintTop_toTopOf="parent" />
18+
19+
<TextView
20+
android:id="@+id/tvContext"
21+
android:layout_width="wrap_content"
22+
android:layout_height="wrap_content"
23+
android:layout_marginStart="32dp"
24+
android:layout_marginTop="8dp"
25+
android:text="@string/bacon_ipsum"
26+
app:layout_constraintEnd_toEndOf="parent"
27+
app:layout_constraintStart_toStartOf="parent"
28+
app:layout_constraintTop_toBottomOf="@id/ivImage" />
29+
30+
</androidx.constraintlayout.widget.ConstraintLayout>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,36 @@
11
<resources>
22
<string name="app_name">Tutorial3-1Transitions</string>
3+
<string name="activity1_1">Ch1-1 Basics</string>
4+
5+
<string name="bacon_ipsum_short">
6+
Bacon ipsum dolor sit amet venison shankle pork chop meatball tri-tip beef ribs turducken.
7+
Strip steak ball tip boudin shank, turducken leberkas pork chop beef ribs ham hock sausage
8+
frankfurter prosciutto doner ham.
9+
</string>
10+
11+
<string name="bacon_ipsum">
12+
Bacon ipsum dolor sit amet venison shankle pork chop meatball tri-tip beef ribs turducken.
13+
Strip steak ball tip boudin shank, turducken leberkas pork chop beef ribs ham hock sausage
14+
frankfurter prosciutto doner ham. Bacon landjaeger ball tip, andouille chuck beef ribs jowl
15+
kevin tri-tip turkey biltong frankfurter sausage. Boudin pork belly meatloaf chicken cow
16+
tri-tip kielbasa shoulder. Pork loin pig boudin hamburger pastrami short ribs. Sirloin
17+
tongue pork loin chicken spare ribs bresaola pastrami.\n\n
18+
Tenderloin turducken pork chop, pork belly beef ribs brisket ham. Turducken landjaeger short
19+
loin capicola pancetta pork chop strip steak rump meatloaf brisket kevin doner short ribs
20+
salami. Beef prosciutto flank leberkas landjaeger swine. Fatback prosciutto sausage, jerky
21+
tail tongue hamburger jowl biltong shank pork belly swine filet mignon chicken ground round.
22+
Pork chop porchetta ground round tri-tip tail t-bone.\n\n
23+
Landjaeger rump bacon salami sausage pork loin pig brisket strip steak corned beef. Biltong
24+
sirloin meatloaf ribeye, bresaola cow chicken t-bone frankfurter andouille strip steak jerky
25+
capicola. Ribeye porchetta strip steak boudin. Kielbasa cow brisket pastrami ball tip
26+
tenderloin bresaola ham. Biltong andouille chuck ham hock jerky beef chicken, flank shankle
27+
ball tip venison porchetta kevin fatback kielbasa. Boudin tongue ground round, turkey pork
28+
belly salami corned beef pork tri-tip meatloaf sausage andouille strip steak pig. Spare ribs
29+
beef meatloaf rump sausage doner frankfurter.\n\n
30+
Fatback porchetta pork loin meatball, turducken pork chop drumstick boudin. Kevin tri-tip
31+
ground round corned beef, ribeye swine filet mignon salami pork spare ribs pork chop
32+
brisket. Filet mignon shankle t-bone bacon. Turducken capicola turkey porchetta kielbasa
33+
shank pork loin jerky venison tenderloin boudin ham hock ground round.</string>
34+
35+
<string name="image_header">%1$s by %2$s</string>
336
</resources>

0 commit comments

Comments
 (0)