Skip to content

Commit 7d3c8d9

Browse files
update adapter, and grid item spacing
1 parent 231c3be commit 7d3c8d9

17 files changed

+74
-40
lines changed

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

+5-11
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33
package com.smarttoolfactory.tutorial2_1animatedvectordrawables
44

55
import android.os.Bundle
6+
import android.util.Log
67
import androidx.appcompat.app.AppCompatActivity
78
import androidx.recyclerview.widget.GridLayoutManager
89
import androidx.recyclerview.widget.RecyclerView
9-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.*
10-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.itemdecoration.GridSpacingItemDecoration
11-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.HeaderViewBinder
12-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.ItemClazz
13-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.MappableItemBinder
14-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.SeekableVDViewBinder
10+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.MultipleViewBinderListAdapter
11+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.itemdecoration.GridSpacingItemDecoration
12+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder.*
1513
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.model.AVDModel
1614
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.model.HeaderModel
1715
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.model.SeekableVDModel
@@ -86,6 +84,7 @@ class Activity1_1Basics : AppCompatActivity() {
8684
private fun getVectorDrawableItemList(): List<Any> {
8785

8886
val data = mutableListOf<Any>().apply {
87+
8988
// Add Vector Drawables
9089
add(HeaderModel("Animated Vector Drawable"))
9190
add(AVDModel(R.drawable.avd_likes))
@@ -120,17 +119,12 @@ class Activity1_1Basics : AppCompatActivity() {
120119
add(AVDModel(R.drawable.avd_pathmorph_drawer_hamburger_to_arrow))
121120
add(AVDModel(R.drawable.avd_pathmorph_plusminus_minus_to_plus))
122121
add(AVDModel(R.drawable.avd_pathmorph_plusminus_plus_to_minus))
123-
124122
add(AVDModel(R.drawable.avd_checkable_checkbox_checked_to_unchecked))
125123
add(AVDModel(R.drawable.avd_checkable_checkbox_unchecked_to_checked))
126124
add(AVDModel(R.drawable.avd_checkable_expandcollapse_collapsed_to_expanded))
127125
add(AVDModel(R.drawable.avd_checkable_expandcollapse_expanded_to_collapsed))
128126
add(AVDModel(R.drawable.avd_checkable_radiobutton_checked_to_unchecked))
129127
add(AVDModel(R.drawable.avd_checkable_radiobutton_unchecked_to_checked))
130-
131-
add(HeaderModel("Trims, clips & fills"))
132-
133-
134128
}
135129

136130
return data.toList()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables
2+
3+
class Activity1_2StateChange {
4+
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import android.view.View
77
import androidx.databinding.DataBindingUtil
88
import androidx.recyclerview.widget.DividerItemDecoration
99
import androidx.recyclerview.widget.LinearLayoutManager
10-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.BaseAdapter
11-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.ChapterSelectionAdapter
12-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.model.ActivityClassModel
10+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.BaseAdapter
11+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.ChapterSelectionAdapter
12+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.model.ActivityClassModel
1313
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.databinding.ActivityMainBinding
1414
import java.util.ArrayList
1515

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter
22

33
import android.view.LayoutInflater
44
import android.view.View
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter
22

33
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.R
4-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.model.ActivityClassModel
4+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.model.ActivityClassModel
55

66

77
/**
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter
22

33
import android.view.ViewGroup
44
import androidx.recyclerview.widget.ListAdapter
55
import androidx.recyclerview.widget.RecyclerView.ViewHolder
6-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.ItemClazz
7-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.ItemDiffCallback
8-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.MappableItemBinder
6+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder.ItemClazz
7+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder.ItemDiffCallback
8+
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder.MappableItemBinder
99

1010
/**
1111
* RecyclerView adapter for setting list with different layouts using [MappableItemViewBinder].
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.itemdecoration
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.itemdecoration
22

33
import android.graphics.Rect
44
import android.view.View
@@ -11,7 +11,17 @@ class GridSpacingItemDecoration(
1111
private val data: List<Any>
1212
) : RecyclerView.ItemDecoration() {
1313

14-
var previousHeaderPosition = -100
14+
private val headerPositions = mutableListOf<Int>()
15+
16+
init {
17+
data.forEachIndexed { index, item ->
18+
if (item is HeaderModel) {
19+
headerPositions.add(index)
20+
}
21+
}
22+
}
23+
24+
var headerPosition = -1
1525

1626
override fun getItemOffsets(
1727
outRect: Rect,
@@ -21,23 +31,29 @@ class GridSpacingItemDecoration(
2131
) {
2232
val position = parent.getChildAdapterPosition(view)
2333

34+
2435
if ((data[position] is HeaderModel)) {
25-
previousHeaderPosition = position
2636
return
2737
}
2838

29-
val column = if (previousHeaderPosition >= 0) {
30-
(position - (previousHeaderPosition + 1)) % spanCount
39+
if (headerPositions.isEmpty()) {
40+
headerPosition = -1
3141
} else {
32-
position % spanCount
42+
headerPositions.forEach {
43+
if (position >= it) {
44+
headerPosition = it
45+
}
46+
}
3347
}
3448

35-
if (previousHeaderPosition < 0) {
49+
val column = (position - (headerPosition + 1)) % spanCount
50+
51+
if (headerPosition < 0) {
3652
if (position < spanCount) { // top edge
3753
outRect.top = spacing
3854
}
39-
}else if(previousHeaderPosition < spanCount) {
40-
if (position - (previousHeaderPosition +1) < spanCount) {
55+
} else if (headerPosition < spanCount) {
56+
if (position - (headerPosition + 1) < spanCount) {
4157
outRect.top = spacing
4258
}
4359
}
@@ -46,4 +62,5 @@ class GridSpacingItemDecoration(
4662
outRect.right = (column + 1) * spacing / spanCount
4763
outRect.bottom = spacing
4864
}
65+
4966
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.model
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.model
22

33
data class ActivityClassModel(val clazz: Class<*>, val description: String = clazz.name)
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder
22

33
import android.view.ViewGroup
44
import androidx.recyclerview.widget.RecyclerView
55
import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
66
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.R
7-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.MappableItemViewBinder
8-
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder.inflate
97
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.databinding.ItemAnimatedVectorDrawableBinding
108
import com.smarttoolfactory.tutorial2_1animatedvectordrawables.model.AVDModel
119

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder
22

33
import android.view.ViewGroup
44
import androidx.recyclerview.widget.RecyclerView
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder
22

33
import androidx.recyclerview.widget.DiffUtil
44

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder
22

33
import android.view.ViewGroup
44
import androidx.recyclerview.widget.RecyclerView
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.chapter1_vector_drawables.adapter.viewholder
1+
package com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.viewholder
22

33
import android.view.LayoutInflater
44
import android.view.ViewGroup
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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+
8+
<androidx.recyclerview.widget.RecyclerView
9+
android:id="@+id/recyclerView"
10+
android:background="#dce6f1"
11+
android:layout_width="match_parent"
12+
android:layout_height="match_parent"
13+
android:scrollbars="vertical"
14+
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
15+
app:layout_constraintBottom_toBottomOf="parent"
16+
app:layout_constraintEnd_toEndOf="parent"
17+
app:layout_constraintStart_toStartOf="parent"
18+
app:layout_constraintTop_toTopOf="parent"
19+
app:spanCount="3"
20+
tools:listitem="@layout/item_image_button" />
21+
</androidx.constraintlayout.widget.ConstraintLayout>

Tutorial2-1AnimatedVectorDrawables/src/main/res/layout/activity_main.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<data>
55
<variable
66
name="obj"
7-
type="com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.model.ActivityClassModel" />
7+
type="com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.model.ActivityClassModel" />
88
</data>
99

1010
<androidx.constraintlayout.widget.ConstraintLayout xmlns:tools="http://schemas.android.com/tools"

Tutorial2-1AnimatedVectorDrawables/src/main/res/layout/row_layout.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<variable
77
name="obj"
8-
type="com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter_chapter_selection.model.ActivityClassModel" />
8+
type="com.smarttoolfactory.tutorial2_1animatedvectordrawables.adapter.model.ActivityClassModel" />
99
</data>
1010

1111
<androidx.constraintlayout.widget.ConstraintLayout

0 commit comments

Comments
 (0)