diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 8a21463..fe21ac7 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 681f41a..88ea3aa 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -1,5 +1,8 @@
+
+
+
@@ -112,5 +115,8 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 2cc1dda..8d8276c 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -12,6 +12,7 @@
+
diff --git a/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml b/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml
new file mode 100644
index 0000000..bf16fff
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml
new file mode 100644
index 0000000..af701f9
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml
new file mode 100644
index 0000000..27b1867
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml
new file mode 100644
index 0000000..de8f1b1
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml
new file mode 100644
index 0000000..c75041e
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml
new file mode 100644
index 0000000..37b12ef
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml b/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml
new file mode 100644
index 0000000..269a07c
--- /dev/null
+++ b/.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0_jar.xml b/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0_jar.xml
deleted file mode 100644
index 3740751..0000000
--- a/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0_jar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml
deleted file mode 100644
index e1feb80..0000000
--- a/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0_jar.xml b/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0_jar.xml
deleted file mode 100644
index 83e1a45..0000000
--- a/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
deleted file mode 100644
index 5ffd439..0000000
--- a/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_collection_collection_1_0_0_jar.xml b/.idea/libraries/Gradle__androidx_collection_collection_1_0_0_jar.xml
deleted file mode 100644
index 2fee65b..0000000
--- a/.idea/libraries/Gradle__androidx_collection_collection_1_0_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml
similarity index 61%
rename from .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml
rename to .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml
index 8d00e18..98e77e9 100644
--- a/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml
+++ b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml
@@ -1,9 +1,9 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3_jar.xml b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1_jar.xml
similarity index 59%
rename from .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3_jar.xml
rename to .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1_jar.xml
index f92fb42..4ecdabe 100644
--- a/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3_jar.xml
+++ b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1_jar.xml
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml
deleted file mode 100644
index 7b31998..0000000
--- a/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_core_core_1_3_1_aar.xml
similarity index 56%
rename from .idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml
rename to .idea/libraries/Gradle__androidx_core_core_1_3_1_aar.xml
index af26260..32fc65e 100644
--- a/.idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_core_core_1_3_1_aar.xml
@@ -1,16 +1,16 @@
-
+
-
+
-
-
-
+
+
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_core_core_ktx_1_3_1_aar.xml b/.idea/libraries/Gradle__androidx_core_core_ktx_1_3_1_aar.xml
new file mode 100644
index 0000000..73ea56c
--- /dev/null
+++ b/.idea/libraries/Gradle__androidx_core_core_ktx_1_3_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
deleted file mode 100644
index 1826a43..0000000
--- a/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_0_0_aar.xml
new file mode 100644
index 0000000..bb817ab
--- /dev/null
+++ b/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_0_0_aar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml
deleted file mode 100644
index 485b3af..0000000
--- a/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
deleted file mode 100644
index 59e538a..0000000
--- a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
deleted file mode 100644
index b286c7a..0000000
--- a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0_jar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0_jar.xml
deleted file mode 100644
index f2e418b..0000000
--- a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0_jar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml
deleted file mode 100644
index 25318eb..0000000
--- a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml
deleted file mode 100644
index 71e0405..0000000
--- a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
deleted file mode 100644
index 456242b..0000000
--- a/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
deleted file mode 100644
index 3bc1292..0000000
--- a/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml
deleted file mode 100644
index cc5318f..0000000
--- a/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
deleted file mode 100644
index 839929c..0000000
--- a/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
deleted file mode 100644
index 9dfdd0e..0000000
--- a/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_1_0_alpha3_aar.xml b/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_1_0_alpha3_aar.xml
deleted file mode 100644
index c276f5d..0000000
--- a/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_1_0_alpha3_aar.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_1_0_alpha3_aar.xml b/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_1_0_alpha3_aar.xml
deleted file mode 100644
index a18e953..0000000
--- a/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_1_0_alpha3_aar.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_test_monitor_1_1_0_alpha3_aar.xml b/.idea/libraries/Gradle__androidx_test_monitor_1_1_0_alpha3_aar.xml
deleted file mode 100644
index 143e3cd..0000000
--- a/.idea/libraries/Gradle__androidx_test_monitor_1_1_0_alpha3_aar.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_test_runner_1_1_0_alpha3_aar.xml b/.idea/libraries/Gradle__androidx_test_runner_1_1_0_alpha3_aar.xml
deleted file mode 100644
index ac75c06..0000000
--- a/.idea/libraries/Gradle__androidx_test_runner_1_1_0_alpha3_aar.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml
deleted file mode 100644
index bb4bc59..0000000
--- a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml
deleted file mode 100644
index fd9177f..0000000
--- a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml
deleted file mode 100644
index 256b408..0000000
--- a/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
index 01f8cb5..271ad02 100644
--- a/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
+++ b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml
new file mode 100644
index 0000000..fb18e7d
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml
new file mode 100644
index 0000000..f0fb218
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml
new file mode 100644
index 0000000..34fdd7b
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml
new file mode 100644
index 0000000..bc7d997
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml b/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml
new file mode 100644
index 0000000..80e4d73
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_1_1_3_aar.xml b/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_1_1_3_aar.xml
new file mode 100644
index 0000000..c0ef18f
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_1_1_3_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_solver_1_1_3_jar.xml b/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_solver_1_1_3_jar.xml
new file mode 100644
index 0000000..c0adf88
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_solver_1_1_3_jar.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml
new file mode 100644
index 0000000..1725c64
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml
new file mode 100644
index 0000000..ed556a5
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml
new file mode 100644
index 0000000..10fb256
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml
new file mode 100644
index 0000000..3302f66
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml
new file mode 100644
index 0000000..eaf8ec2
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml
new file mode 100644
index 0000000..33410b1
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml
new file mode 100644
index 0000000..baf3148
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml
new file mode 100644
index 0000000..b04a965
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml
new file mode 100644
index 0000000..48662e5
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml
new file mode 100644
index 0000000..c69caa6
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml
new file mode 100644
index 0000000..8a1b37f
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml b/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml
new file mode 100644
index 0000000..0fdecce
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml
new file mode 100644
index 0000000..9ec03b1
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml
new file mode 100644
index 0000000..c116e4c
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml
new file mode 100644
index 0000000..15dfe98
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml
new file mode 100644
index 0000000..0c5c020
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml
new file mode 100644
index 0000000..cec3d30
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml
new file mode 100644
index 0000000..0dd14fd
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml
new file mode 100644
index 0000000..1fd1803
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_3_0_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_3_0_2_aar.xml
new file mode 100644
index 0000000..0b237db
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_3_0_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml
new file mode 100644
index 0000000..521eaf1
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2_aar.xml
new file mode 100644
index 0000000..38240e9
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml
new file mode 100644
index 0000000..99fa66c
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_monitor_1_0_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_monitor_1_0_2_aar.xml
new file mode 100644
index 0000000..7fe5907
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_monitor_1_0_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml
new file mode 100644
index 0000000..f85b2ec
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml
new file mode 100644
index 0000000..d2f9f5a
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_runner_1_0_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_runner_1_0_2_aar.xml
new file mode 100644
index 0000000..54badcc
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_test_runner_1_0_2_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml
new file mode 100644
index 0000000..40f59c9
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml b/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml
new file mode 100644
index 0000000..8fb94e4
--- /dev/null
+++ b/.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_30_aar.xml b/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_30_aar.xml
index 16927a8..02b24bd 100644
--- a/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_30_aar.xml
+++ b/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_30_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_3_0_4_aar.xml b/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_3_0_4_aar.xml
new file mode 100644
index 0000000..0f84059
--- /dev/null
+++ b/.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_3_0_4_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_11_0_jar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_11_0_jar.xml
new file mode 100644
index 0000000..8825e59
--- /dev/null
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_11_0_jar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_11_0_jar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_11_0_jar.xml
new file mode 100644
index 0000000..0b3323e
--- /dev/null
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_11_0_jar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_11_0_aar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_11_0_aar.xml
new file mode 100644
index 0000000..e5c9149
--- /dev/null
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_11_0_aar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_9_0_aar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_9_0_aar.xml
index 724c505..abf8b07 100644
--- a/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_9_0_aar.xml
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_9_0_aar.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_11_0_aar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_11_0_aar.xml
new file mode 100644
index 0000000..82a0e77
--- /dev/null
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_11_0_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_9_0_aar.xml b/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_9_0_aar.xml
index 7b9ee8f..51104e4 100644
--- a/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_9_0_aar.xml
+++ b/.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_9_0_aar.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml b/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml
new file mode 100644
index 0000000..5fdb330
--- /dev/null
+++ b/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_3_72_jar.xml b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_3_72_jar.xml
new file mode 100644
index 0000000..5abebcd
--- /dev/null
+++ b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_3_72_jar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index e97efd9..1631e20 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,7 @@
+
diff --git a/.idea/modules/appx/appx.iml b/.idea/modules/appx/appx.iml
new file mode 100644
index 0000000..ee42e66
--- /dev/null
+++ b/.idea/modules/appx/appx.iml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules/kotlinlib/kotlinlib.iml b/.idea/modules/kotlinlib/kotlinlib.iml
index 1af4324..14cfdc9 100644
--- a/.idea/modules/kotlinlib/kotlinlib.iml
+++ b/.idea/modules/kotlinlib/kotlinlib.iml
@@ -32,7 +32,7 @@
-
+
@@ -135,43 +135,43 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e8ad0c2..fdfc015 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -11,78 +11,225 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -100,12 +247,14 @@
+
+
@@ -123,9 +272,9 @@
-
-
-
+
+
+
@@ -136,24 +285,28 @@
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
@@ -212,6 +365,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -273,7 +477,14 @@
1584972555029
-
+
+ 1599279038062
+
+
+
+ 1599279038062
+
+
@@ -310,54 +521,91 @@
-
+
+
-
-
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
-
-
+
+
+
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index e2d4548..fabdb44 100644
--- a/README.md
+++ b/README.md
@@ -152,6 +152,10 @@ android.enableJetifier=true
## 版本说明
+**v2.8**
+
+- 添加 Androidx lib,支持viewpager2
+
**v2.7**
- 处理设置 setCurrentPosition 的问题
@@ -221,6 +225,8 @@ android.enableJetifier=true
|banner_card_height|integer,dimension|卡片的高度|
|banner_iscycle|boolean|是否循环|
|banner_transformer|card,mz,zoom,depath|transformer的效果|
+|banner2_l_margin|dimension|Viewpager2专属,左边偏移量|
+|banner2_r_margin|dimension|Viewpager2专属,右边偏移量|
**CircleIndicator**
diff --git a/README_Banner.md b/README_Banner.md
index a8d5175..c8f245c 100644
--- a/README_Banner.md
+++ b/README_Banner.md
@@ -40,6 +40,14 @@
主要为 **BannerViewPager** 这个类,在布局中,添加自己喜欢的 Indicator 即可。
+
+## ViewPager2 的使用
+
+ViewPager2 使用的类是 BannerViewPager2,所以它的使用与 BannerViewPager 差不多,只是魅族方法中,
+偏移量使用的是 **banner2_l_margin和banner2_r_margin**,也可以动态设置,使用**setMzMargin()**,
+当然,此时 xml 就不要用 layout_margin = "20dp"这样的方法了。
+为什么不统一?ViewPager2 是final,继承不了,没辙。。。。
+
### Banner + Indicator
首先,一个简单的 banner + indicator 如下,如果想要第一种效果,记得父布局 clipChildren="false":
```
diff --git a/app/app.iml b/app/app.iml
index 5e8d421..b0a0bd3 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -87,23 +87,24 @@
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -115,37 +116,37 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java b/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java
index e146f6c..affa563 100644
--- a/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java
+++ b/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java
@@ -38,8 +38,6 @@ public void fragment(View view) {
startActivity(new Intent(this, TabActivity.class));
}
-
-
public void arc(View view) {
startActivity(new Intent(this, ArcActivity.class));
}
diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java
index f7e6bfa..ef7d371 100644
--- a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java
+++ b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java
@@ -1,10 +1,10 @@
package com.zhengsr.viewpagerhelper.adapter;
+import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
-import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java
index b5f686c..b1c391e 100644
--- a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java
+++ b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java
@@ -1,6 +1,7 @@
package com.zhengsr.viewpagerhelper.adapter;
import android.content.Context;
+import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
@@ -8,7 +9,6 @@
import android.widget.ImageView;
import android.widget.TextView;
-import androidx.recyclerview.widget.RecyclerView;
/**
* Created by zhengshaorui on 2018/4/13.
diff --git a/appx/.gitignore b/appx/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/appx/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/appx/build.gradle b/appx/build.gradle
new file mode 100644
index 0000000..a3ce66c
--- /dev/null
+++ b/appx/build.gradle
@@ -0,0 +1,53 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.1"
+
+ defaultConfig {
+ applicationId "com.zhengsr.viewpagerhelper"
+ minSdkVersion 19
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+ implementation 'androidx.core:core-ktx:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+ implementation project(path: ':viewpagerlibx')
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ implementation 'androidx.cardview:cardview:1.0.0'
+ implementation 'androidx.viewpager2:viewpager2:1.0.0'
+
+ implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
+ implementation 'com.squareup.retrofit2:retrofit:2.5.0'
+ implementation 'com.squareup.retrofit2:converter-scalars:2.5.0'
+
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
+ implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
+ implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
+ implementation 'com.alibaba:fastjson:1.1.71.android'
+
+ implementation 'de.hdodenhof:circleimageview:3.0.1'
+ implementation 'com.github.bumptech.glide:glide:4.11.0'
+ implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'
+
+}
diff --git a/appx/proguard-rules.pro b/appx/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/appx/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt b/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..5635d81
--- /dev/null
+++ b/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.zhengsr.viewpagerhelper
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.zhengsr.appx", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/appx/src/main/AndroidManifest.xml b/appx/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..e21ebe4
--- /dev/null
+++ b/appx/src/main/AndroidManifest.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java
new file mode 100644
index 0000000..bc7a6f1
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java
@@ -0,0 +1,64 @@
+package com.zhengsr.viewpagerhelper;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.SparseArray;
+import android.view.View;
+
+import androidx.viewpager.widget.ViewPager;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class CustomViewPager extends ViewPager {
+ private ArrayList childCenterXAbs = new ArrayList<>();
+ private SparseArray childIndex = new SparseArray<>();
+
+ public CustomViewPager(Context context) {
+ super(context);
+ init();
+ }
+
+ public CustomViewPager(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ private void init(){
+ setClipToPadding(false);
+ setOverScrollMode(OVER_SCROLL_NEVER);
+ }
+
+
+ /**
+ * @param childCount
+ * @param n
+ * @return 第n个位置的child 的绘制索引
+ */
+ @Override
+ protected int getChildDrawingOrder(int childCount, int n) {
+ if (n == 0 || childIndex.size() != childCount) {
+ childCenterXAbs.clear();
+ childIndex.clear();
+ int viewCenterX = getViewCenterX(this);
+ for (int i = 0; i < childCount; ++i) {
+ int indexAbs = Math.abs(viewCenterX - getViewCenterX(getChildAt(i)));
+ //两个距离相同,后来的那个做自增,从而保持abs不同
+ if (childIndex.get(indexAbs) != null) {
+ ++indexAbs;
+ }
+ childCenterXAbs.add(indexAbs);
+ childIndex.append(indexAbs, i);
+ }
+ Collections.sort(childCenterXAbs);//1,0,2 0,1,2
+ }
+ //那个item距离中心点远一些,就先draw它。(最近的就是中间放大的item,最后draw)
+ return childIndex.get(childCenterXAbs.get(childCount - 1 - n));
+ }
+
+ private int getViewCenterX(View view) {
+ int[] array = new int[2];
+ view.getLocationOnScreen(array);
+ return array[0] + view.getWidth() / 2;
+ }
+}
\ No newline at end of file
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java
new file mode 100644
index 0000000..0f479d2
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java
@@ -0,0 +1,11 @@
+package com.zhengsr.viewpagerhelper;
+
+/**
+ * Created by Administrator on 2017/11/9.
+ */
+
+public class LoopBean {
+ public String url;
+ public int res;
+ public String text;
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java
new file mode 100644
index 0000000..bc50c87
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java
@@ -0,0 +1,45 @@
+package com.zhengsr.viewpagerhelper;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.zhengsr.viewpagerhelper.activity.ArcActivity;
+import com.zhengsr.viewpagerhelper.activity.loop.LoopActivity;
+import com.zhengsr.viewpagerhelper.tab.TabActivity;
+
+
+public class MainActivity extends AppCompatActivity {
+ private static final String TAG = "zsr";
+ private static final int[] RES = {R.mipmap.guide1, R.mipmap.guide2, R.mipmap.guide3,
+ R.mipmap.guide4};
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+
+ }
+
+
+
+
+ public void loop_max(View view) {
+ startActivity(new Intent(this, LoopActivity.class));
+ }
+
+ public void fragment(View view) {
+ startActivity(new Intent(this, TabActivity.class));
+ }
+
+
+
+ public void arc(View view) {
+ startActivity(new Intent(this, ArcActivity.class));
+ }
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java
new file mode 100644
index 0000000..cee1223
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java
@@ -0,0 +1,17 @@
+package com.zhengsr.viewpagerhelper;
+
+import android.app.Application;
+
+
+/**
+ * Created by zhengshaorui
+ * time: 2018/9/16
+ */
+
+public class MainApplication extends Application {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java
new file mode 100644
index 0000000..32176bb
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java
@@ -0,0 +1,12 @@
+package com.zhengsr.viewpagerhelper;
+
+import com.bumptech.glide.annotation.GlideModule;
+import com.bumptech.glide.module.AppGlideModule;
+
+/**
+ * Created by zhengshaorui
+ * time: 2018/9/16
+ */
+@GlideModule
+public class MyAppGlideModule extends AppGlideModule {
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java
new file mode 100644
index 0000000..b6d20b1
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java
@@ -0,0 +1,37 @@
+package com.zhengsr.viewpagerhelper.activity;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.view.ArcImageView;
+
+
+public class ArcActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_arc);
+
+ ArcImageView imageView = findViewById(R.id.image);
+
+ Glide.with(this)
+ .load(R.mipmap.beauty1)
+ .into(imageView);
+
+ /* imageView.arcHeight(50)
+ .blur(10)
+ .scaleFactor(1.2f)
+ .scaleX(400)
+ .scaleY(0)
+ .update();*/
+
+
+
+
+
+ }
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java
new file mode 100644
index 0000000..3ba0a47
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java
@@ -0,0 +1,62 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.indicator.CircleIndicator;
+import com.zhengsr.viewpagerlib.view.ArcImageView;
+import com.zhengsr.viewpagerlib.view.BannerViewPager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ArcLoopActivity extends AppCompatActivity {
+
+ private static final int[] RESID = {
+ R.mipmap.beauty1,
+ R.mipmap.beauty2,
+ R.mipmap.beauty3,
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_arc_loop);
+ initView();
+ }
+
+ private void initView() {
+ BannerViewPager bannerViewPager = findViewById(R.id.loop_viewpager_arc);
+ CircleIndicator indicator = findViewById(R.id.bottom_indicator);
+ List beans = new ArrayList<>();
+ for (int i = 0; i < RESID.length; i++) {
+ ArcBean bean = new ArcBean();
+ bean.resId = RESID[i];
+ beans.add(bean);
+ }
+
+ //添加 indicator
+ bannerViewPager.addIndicator(indicator);
+
+ bannerViewPager.setPageListener(R.layout.arc_loop_layout, beans, new PageHelperListener() {
+ @Override
+ public void bindView(View view, ArcBean data, int position) {
+ ArcImageView imageView = view.findViewById(R.id.arc_icon);
+ Glide.with(view)
+ .load(data.resId)
+ .into(imageView);
+ }
+ });
+
+
+ }
+
+ class ArcBean {
+ public int resId;
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java
new file mode 100644
index 0000000..4d8d65e
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java
@@ -0,0 +1,65 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.view.BannerViewPager2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CardLoopActivity extends AppCompatActivity {
+
+
+ String[] TEXT = new String[]{"1","2","3","4"};
+ private BannerViewPager2 mBannerViewPager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_card_loop);
+
+ initView();
+ }
+
+ private void initView() {
+ mBannerViewPager = findViewById(R.id.loop_viewpager_card);
+
+ List beans = new ArrayList<>();
+ for (int i = 0; i < TEXT.length; i++) {
+ CardBean bean = new CardBean();
+ bean.msg = TEXT[i];
+ beans.add(bean);
+ }
+
+ mBannerViewPager.setCurrentPosition(1);
+
+
+ mBannerViewPager.setPageListener(R.layout.item_card, beans, new PageHelperListener() {
+ @Override
+ public void bindView(View view, CardBean data, int position) {
+ TextView textView = view.findViewById(R.id.item_card_tv);
+ textView.setText(data.msg);
+ }
+ });
+
+ }
+
+
+ class CardBean{
+ public String msg;
+ }
+
+
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mBannerViewPager.stopAnim();
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java
new file mode 100644
index 0000000..96fbfd4
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java
@@ -0,0 +1,162 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.bean.CirBean;
+import com.zhengsr.viewpagerlib.bean.PageBean;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.indicator.CircleIndicator;
+import com.zhengsr.viewpagerlib.type.BannerTransType;
+import com.zhengsr.viewpagerlib.type.CircleIndicatorType;
+import com.zhengsr.viewpagerlib.view.BannerViewPager2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CircleIndicatorActivity extends AppCompatActivity {
+ private static final String TAG = "CircleIndicatorActivity";
+ private static final int[] RESID = {
+ R.mipmap.beauty1,
+ R.mipmap.beauty2,
+ R.mipmap.beauty3,
+ };
+ private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"};
+ private List mDatas;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mz_loop);
+ mDatas = new ArrayList<>();
+ //配置数据,这里是resid和text
+ for (int i = 0; i < TEXT.length; i++) {
+ TestBean bean = new TestBean();
+ bean.resId = RESID[i];
+ bean.msg = TEXT[i];
+ mDatas.add(bean);
+ }
+
+ normal();
+ cirToRect();
+ circle();
+ scale();
+
+
+ }
+
+
+ private void normal(){
+ BannerViewPager2 BannerViewPager2 = findViewById(R.id.normal_banner);
+ CircleIndicator indicator = findViewById(R.id.normal_indicator);
+
+ BannerViewPager2.addIndicator(indicator);
+ BannerViewPager2.setCurrentPosition(1);
+
+ showBanner(BannerViewPager2,indicator);
+ }
+
+ private void cirToRect(){
+ BannerViewPager2 BannerViewPager2 = findViewById(R.id.rect_banner);
+ CircleIndicator indicator = findViewById(R.id.rect_indicator);
+
+
+ showBanner(BannerViewPager2, indicator);
+ }
+
+ private void circle(){
+ BannerViewPager2 BannerViewPager2 = findViewById(R.id.move_banner);
+ CircleIndicator indicator = findViewById(R.id.move_indicator);
+
+ BannerViewPager2.addIndicator(indicator);
+
+ showBanner(BannerViewPager2,indicator);
+ }
+
+ private void scale(){
+ BannerViewPager2 BannerViewPager2 = findViewById(R.id.scale_banner);
+ CircleIndicator indicator = findViewById(R.id.scale_indicator);
+
+ BannerViewPager2.setCurrentPosition(1);
+ CirBean cirBean = new CirBean();
+ cirBean.type = CircleIndicatorType.SCALE;
+ cirBean.cirSize = 20;
+ cirBean.scaleFactor = 1.5f;
+ cirBean.horizonMargin = 40;
+ cirBean.normalColor = Color.GRAY;
+ cirBean.selectedColor = Color.WHITE;
+
+ /**
+ * 配置 CircleIndicator 的自定义属性
+ */
+ indicator.addCirBean(cirBean);
+
+ /**
+ * 配置 BannerViewPager2 的数据
+ */
+ PageBean bean = new PageBean();
+ bean.isAutoLoop = true;
+ bean.smoothScrollTime = 400;
+ bean.loopTime = 5000;
+ bean.transFormer = BannerTransType.DEPATH;
+
+ BannerViewPager2.addPageBean(bean)
+ .addIndicator(indicator);
+
+ showBanner(BannerViewPager2,indicator);
+
+ }
+
+
+
+ private void showBanner(BannerViewPager2 BannerViewPager2, CircleIndicator indicator) {
+ BannerViewPager2.addIndicator(indicator);
+
+ /**
+ * 设置监听即可,loop_layout 为要展示的内容,比如一个 ImageView,或者参考示例
+ * 其中,setText 为模板方法,为了简便代码,当然还有其他一些方法,可查阅 PageHelperListener
+ * onItemClick 为点击事件,当然还有其他方法,重写即可,比如子控件事件 onItemChildClick,如果有子控件
+ * 的点击事件,需要先在 bindView 中注册,比如 addChildrenClick(view,R.id.item_text,position),
+ * 其他一些方法,可查阅 PageHelperListener
+ */
+ BannerViewPager2.setPageListener(R.layout.loop_layout, mDatas, new PageHelperListener() {
+ @Override
+ public void bindView(View view, final TestBean data, int position) {
+ setText(view, R.id.loop_text, data.msg);
+
+
+ //注册子控件事件
+ //addChildrenClick(view,R.id.item_text,position);
+
+
+ ImageView imageView = view.findViewById(R.id.loop_icon);
+ Glide.with(view)
+ .load(data.resId)
+ .into(imageView);
+ }
+
+
+
+ @Override
+ public void onItemClick(View view, TestBean data, int position) {
+ super.onItemClick(view, data, position);
+ Toast.makeText(CircleIndicatorActivity.this, data.msg+" "+position, Toast.LENGTH_SHORT).show();
+ }
+
+
+ });
+ }
+
+
+ class TestBean {
+ public int resId;
+ public String msg;
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java
new file mode 100644
index 0000000..3a746e8
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java
@@ -0,0 +1,56 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.zhengsr.viewpagerhelper.R;
+
+
+public class LoopActivity extends AppCompatActivity {
+ private static final String TAG = "LoopActivity";
+
+
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_loop);
+ }
+
+
+
+
+ public void card(View view) {
+ startActivity(new Intent(this,CardLoopActivity.class));
+ }
+
+ public void circleIndicator(View view) {
+ startActivity(new Intent(this, CircleIndicatorActivity.class));
+ }
+
+ public void arc(View view) {
+ startActivity(new Intent(this,ArcLoopActivity.class));
+ }
+
+
+ public void net(View view) {
+ startActivity(new Intent(this,NetWorkActivity.class));
+ }
+
+ public void rectIndicator(View view) {
+ startActivity(new Intent(this,RectIndicatorActivity.class));
+ }
+
+ public void recttext(View view) {
+
+ startActivity(new Intent(this,TextIndicatorActivity.class));
+ }
+
+ public void scaleiamge(View view) {
+ startActivity(new Intent(this,ScaleImageActivity.class));
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java
new file mode 100644
index 0000000..6ae4225
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java
@@ -0,0 +1,157 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerhelper.bean.ArticleData;
+import com.zhengsr.viewpagerhelper.bean.BannerBean;
+import com.zhengsr.viewpagerhelper.bean.BaseResponse;
+import com.zhengsr.viewpagerhelper.bean.PageDataInfo;
+import com.zhengsr.viewpagerhelper.rx.HttpCreate;
+import com.zhengsr.viewpagerhelper.rx.RxUtils;
+import com.zhengsr.viewpagerhelper.view.BannerView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+
+public class NetWorkActivity extends AppCompatActivity {
+ private static final String TAG = "NetWorkActivity";
+ private static final String WANANDROID_BANNER = "https://www.wanandroid.com/banner/json";
+
+ private RecyclerView mRecyclerView;
+ private List mArticleBeans = new ArrayList<>();
+ private ArticleAdapter mAdapter;
+ private BannerView mBannerView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_recyclerview);
+ initView();
+ }
+
+ private void initView() {
+ LinearLayoutManager manager = new LinearLayoutManager(this);
+ mRecyclerView = findViewById(R.id.recycler);
+ mRecyclerView.setLayoutManager(manager);
+ mAdapter = new ArticleAdapter(R.layout.item_article_recy_layout, mArticleBeans);
+
+ mBannerView = new BannerView(this);
+
+ mAdapter.addHeaderView(mBannerView);
+ mRecyclerView.setAdapter(mAdapter);
+
+ loadData();
+
+ }
+
+ public void update(View view) {
+ loadData();
+ }
+
+ private boolean isSecond;
+ private void loadData() {
+ //banner
+
+
+
+ HttpCreate.getServer().getBanner()
+ .compose(RxUtils.>>rxScheduers())
+ .compose(RxUtils.>handleResult())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(List bannerBeans) {
+
+ mBannerView.setData(bannerBeans);
+ mAdapter.notifyDataSetChanged();
+
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.d(TAG, "zsr - onError: "+e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+
+ HttpCreate.getServer().getArticle(0)
+ .compose(RxUtils.>>>rxScheduers())
+ .compose(RxUtils.>>handleResult())
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(PageDataInfo> listPageDataInfo) {
+ mAdapter.setNewData(listPageDataInfo.getDatas());
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+
+
+
+
+ public class ArticleAdapter extends BaseQuickAdapter {
+
+
+ public ArticleAdapter(int layoutResId, @Nullable List data) {
+ super(layoutResId, data);
+ }
+
+
+ @Override
+ protected void convert(BaseViewHolder helper, ArticleData item) {
+ String msg;
+ if (!TextUtils.isEmpty(item.getSuperChapterName())){
+ msg = item.getSuperChapterName()+"/"+item.getChapterName();
+ }else{
+ msg = item.getChapterName();
+ }
+ String author = (item.getAuthor() != null && item.getAuthor().length() > 0) ? item.getAuthor():item.getShareUser();
+ helper.setText(R.id.item_article_author,author)
+ .setText(R.id.item_article_chapat, msg)
+ .setText(R.id.item_article_title,item.getTitle())
+ .setText(R.id.item_article_time,item.getNiceDate());
+
+ }
+
+
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java
new file mode 100644
index 0000000..1a97371
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java
@@ -0,0 +1,130 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.bean.PageBean;
+import com.zhengsr.viewpagerlib.bean.RectBean;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.indicator.RectIndicator;
+import com.zhengsr.viewpagerlib.type.BannerTransType;
+import com.zhengsr.viewpagerlib.view.BannerViewPager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RectIndicatorActivity extends AppCompatActivity {
+ private static final String TAG = "RectIndicatorActivity";
+ private static final int[] RESID = {
+ R.mipmap.beauty1,
+ R.mipmap.beauty2,
+ R.mipmap.beauty3,
+ };
+ private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"};
+ private List mDatas;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_rect_inficator);
+ mDatas = new ArrayList<>();
+ //配置数据,这里是resid和text
+ for (int i = 0; i < TEXT.length; i++) {
+ TestBean bean = new TestBean();
+ bean.resId = RESID[i];
+ bean.msg = TEXT[i];
+ mDatas.add(bean);
+ }
+
+ //todo viewpager 默认选中某个,indicator 可以点击
+
+ normal();
+ config();
+
+ }
+
+
+
+ private void normal(){
+ BannerViewPager bannerViewPager = findViewById(R.id.normal_banner);
+ RectIndicator indicator = findViewById(R.id.normal_indicator);
+
+ bannerViewPager.addIndicator(indicator);
+
+ showBanner(bannerViewPager);
+ }
+
+
+
+
+ private void showBanner(BannerViewPager bannerViewPager) {
+
+ bannerViewPager.setPageListener(R.layout.loop_layout, mDatas, new PageHelperListener() {
+ @Override
+ public void bindView(View view, final TestBean data, int position) {
+ setText(view, R.id.loop_text, data.msg);
+ ImageView imageView = view.findViewById(R.id.loop_icon);
+ Glide.with(view)
+ .load(data.resId)
+ .into(imageView);
+ }
+
+ @Override
+ public void onItemClick(View view, TestBean data, int position) {
+ super.onItemClick(view, data, position);
+ Toast.makeText(RectIndicatorActivity.this, data.msg+" "+position, Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ private void config() {
+ BannerViewPager bannerViewPager = findViewById(R.id.scale_banner);
+ RectIndicator indicator = findViewById(R.id.scale_indicator);
+
+ RectBean rectBean = new RectBean();
+ rectBean.horizonMargin = 30;
+ rectBean.normalColor = Color.GRAY;
+ rectBean.selectedColor = Color.WHITE;
+ rectBean.width = 30;
+ rectBean.height = 10;
+ rectBean.roundRadius = 5;
+
+ /**
+ * 配置 CircleIndicator 的自定义属性
+ */
+ indicator.addRectBean(rectBean);
+
+ /**
+ * 配置 BannerViewPager 的数据
+ */
+ PageBean bean = new PageBean();
+ bean.isAutoLoop = true;
+ bean.smoothScrollTime = 400;
+ bean.loopTime = 5000;
+ bean.transFormer = BannerTransType.MZ;
+
+ bannerViewPager.addPageBean(bean)
+ .addIndicator(indicator)
+ .setCurrentPosition(1);
+
+ showBanner(bannerViewPager);
+ }
+
+ class TestBean {
+ public int resId;
+ public String msg;
+
+ @Override
+ public String toString() {
+ return "TestBean{" +
+ "resId=" + resId +
+ ", msg='" + msg + '\'' +
+ '}';
+ }
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java
new file mode 100644
index 0000000..a1ebe30
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java
@@ -0,0 +1,74 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.view.ScaleImageView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ScaleImageActivity extends AppCompatActivity {
+ private int[] mRes = new int[]{
+ R.mipmap.beauty1,R.mipmap.beauty2,R.mipmap.beauty3,R.mipmap.beauty4
+ };
+ private List mViews = new ArrayList<>();
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_scale_image);
+
+ ScaleImageView imageView = findViewById(R.id.scaleimageview);
+ //配置参数
+ imageView.autoScaleTime(5)
+ .limitBroad(false)
+ .doubleFactor(2)
+ .maxFactor(4)
+ .autoFit(true);
+
+ ViewPager viewPager = findViewById(R.id.viewpager);
+
+ for (int i = 0; i < mRes.length; i++) {
+ View view = LayoutInflater.from(this).inflate(R.layout.item_scaleview,null);
+ ScaleImageView scaleImageView = view.findViewById(R.id.scaleview);
+ scaleImageView.setImageResource(mRes[i]);
+ mViews.add(view);
+ }
+ viewPager.setAdapter(new ImageAdapter());
+ }
+
+
+ class ImageAdapter extends PagerAdapter {
+
+ @Override
+ public int getCount() {
+ return mViews.size();
+ }
+ @Override
+ // 每次滑动时销毁当前组件
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ //super.destroyItem(container, position, object);
+ container.removeView(mViews.get(position));
+ }
+ // 每次滑动时,创建当前组件
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ container.addView(mViews.get(position));
+ return mViews.get(position);
+ }
+
+
+ @Override
+ public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
+ return view==o;
+ }
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java
new file mode 100644
index 0000000..cbcdd48
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java
@@ -0,0 +1,62 @@
+package com.zhengsr.viewpagerhelper.activity.loop;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.indicator.TextIndicator;
+import com.zhengsr.viewpagerlib.view.BannerViewPager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TextIndicatorActivity extends AppCompatActivity {
+ private static final int[] RESID = {
+ R.mipmap.beauty1,
+ R.mipmap.beauty2,
+ R.mipmap.beauty3,
+ };
+ private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"};
+ private List mDatas;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_text_indicator);
+ mDatas = new ArrayList<>();
+ //配置数据,这里是resid和text
+ for (int i = 0; i < TEXT.length; i++) {
+ TestBean bean = new TestBean();
+ bean.resId = RESID[i];
+ bean.msg = TEXT[i];
+ mDatas.add(bean);
+ }
+ BannerViewPager bannerViewPager = findViewById(R.id.normal_banner);
+ TextIndicator indicator = findViewById(R.id.normal_indicator);
+
+ bannerViewPager.addIndicator(indicator);
+ bannerViewPager.setCurrentPosition(1);
+
+ bannerViewPager.setPageListener(R.layout.image_layout, mDatas, new PageHelperListener() {
+ @Override
+ public void bindView(View view, TestBean data, int position) {
+
+ ImageView imageView = view.findViewById(R.id.icon);
+ Glide.with(view)
+ .load(data.resId)
+ .into(imageView);
+ }
+ });
+
+
+ }
+
+ class TestBean {
+ public int resId;
+ public String msg;
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java
new file mode 100644
index 0000000..811f8db
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java
@@ -0,0 +1,63 @@
+package com.zhengsr.viewpagerhelper.adapter;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.List;
+
+/**
+ * Created by zhengshaorui on 2018/4/13.
+ */
+public abstract class RBaseAdapter extends RecyclerView.Adapter {
+ private int mLayoutId;
+ private List mDatas; //取泛型是因为不知道bean是啥类型的。
+ private int mWidth;
+
+ private RBaseViewholder mViewholder;
+
+ public RBaseAdapter(int layoutid,List list) {
+ mLayoutId = layoutid;
+ mDatas = list;
+ }
+ public interface onItemClickListener{
+ void onItemClick(View view, int position);
+ }
+ private onItemClickListener mOnItemClickListener;
+ public void setonItemClickListener(onItemClickListener listener){
+ mOnItemClickListener = listener;
+ }
+
+
+ @Override
+ public RBaseViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
+ mViewholder = RBaseViewholder.getViewHolder(parent.getContext(),
+ mLayoutId,parent);
+ return mViewholder;
+ }
+
+ @Override
+ public void onBindViewHolder(RBaseViewholder holder, int position) {
+ if (mOnItemClickListener != null){
+ final int pos = position;
+ holder.getConserView().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mOnItemClickListener.onItemClick(v,pos);
+ }
+ });
+
+ }
+ getConver(holder,mDatas.get(position)); //提供 viewholder 出去,数据由用户处理
+ }
+
+ public abstract void getConver(RBaseViewholder holder,T data);
+
+ //edit by fang
+ @Override
+ public int getItemCount() {
+ return mDatas!=null?mDatas.size():0;
+ }
+ //end
+}
\ No newline at end of file
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java
new file mode 100644
index 0000000..c173be5
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java
@@ -0,0 +1,82 @@
+package com.zhengsr.viewpagerhelper.adapter;
+
+import android.content.Context;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+
+/**
+ * Created by zhengshaorui on 2018/4/13.
+ */
+public class RBaseViewholder extends RecyclerView.ViewHolder {
+ private static final String TAG = "RBaseViewholder";
+ private SparseArray mViewSparseArray; //用来保存 itemview;
+ private View mConserView;
+ public RBaseViewholder(View itemView) {
+ super(itemView);
+ mViewSparseArray = new SparseArray<>();
+ mConserView = itemView;
+ }
+
+ /**
+ * 这里相当于在 oncreateViewholder 中,设置好数据,然后返回
+ * 可以在这里设置宽度,这样就可以动态居中了
+ * @param context
+ * @param layoutid
+ * @param parent
+ * @return
+ */
+ public static RBaseViewholder getViewHolder(Context context, int layoutid, ViewGroup parent){
+ View view = LayoutInflater.from(context).inflate(layoutid,parent,false);
+ RBaseViewholder viewholder = new RBaseViewholder(view);
+ return viewholder;
+ }
+
+
+ public View getConserView(){
+ return mConserView;
+ }
+
+
+ /**
+ * getItemview,通过 id获取view
+ * @param resId
+ * @return
+ */
+ public T getItemView(int resId){
+ View view = mViewSparseArray.get(resId);
+ if (view == null){
+ view = mConserView.findViewById(resId);
+ mViewSparseArray.put(resId,view);
+ }
+ return (T) view;
+ }
+
+ /**
+ * 设置数据,直接通过id获取到view,然后设置数据
+ * @param viewId
+ * @param data
+ * @return
+ */
+ public RBaseViewholder setText(int viewId,String data){
+ TextView textView = (TextView) getItemView(viewId);
+ textView.setText(data);
+ return this;
+ }
+ public RBaseViewholder setDrawable(int viewId,int resId){
+ ImageView imageView = (ImageView) getItemView(viewId);
+ imageView.setBackgroundResource(resId);
+ return this;
+ }
+
+ public void onItemClickListener(View v,int position){};
+
+
+
+}
\ No newline at end of file
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java
new file mode 100644
index 0000000..bfccc48
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java
@@ -0,0 +1,304 @@
+package com.zhengsr.viewpagerhelper.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author by zhengshaorui on 2019/10/8
+ * Describe:
+ */
+public class ArticleData implements Serializable {
+ /**
+ * apkLink :
+ * audit : 1
+ * author :
+ * chapterId : 505
+ * chapterName : LeakCanary
+ * collect : false
+ * courseId : 13
+ * desc :
+ * envelopePic :
+ * fresh : true
+ * id : 10381
+ * link : https://juejin.im/post/5a9d46d2f265da237d0280a3
+ * niceDate : 9小时前
+ * niceShareDate : 20小时前
+ * origin :
+ * prefix :
+ * projectLink :
+ * publishTime : 1574180460000
+ * selfVisible : 0
+ * shareDate : 1574139942000
+ * shareUser : 秉心说
+ * superChapterId : 461
+ * superChapterName : 常见开源库源码解析
+ * tags : []
+ * title : LeakCanary 源码解析
+ * type : 0
+ * userId : 22057
+ * visible : 1
+ * zan : 0
+ */
+
+ private String apkLink;
+ private int audit;
+ private String author;
+ private int chapterId;
+ private String chapterName;
+ private boolean collect;
+ private int courseId;
+ private String desc;
+ private String envelopePic;
+ private boolean fresh;
+ private int id;
+ private String link;
+ private String niceDate;
+ private String niceShareDate;
+ private String origin;
+ private String prefix;
+ private String projectLink;
+ private long publishTime;
+ private int selfVisible;
+ private long shareDate;
+ private String shareUser;
+ private int superChapterId;
+ private String superChapterName;
+ private String title;
+ private int type;
+ private int userId;
+ private int visible;
+ private int zan;
+ private List> tags;
+
+ public String getApkLink() {
+ return apkLink;
+ }
+
+ public void setApkLink(String apkLink) {
+ this.apkLink = apkLink;
+ }
+
+ public int getAudit() {
+ return audit;
+ }
+
+ public void setAudit(int audit) {
+ this.audit = audit;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public int getChapterId() {
+ return chapterId;
+ }
+
+ public void setChapterId(int chapterId) {
+ this.chapterId = chapterId;
+ }
+
+ public String getChapterName() {
+ return chapterName;
+ }
+
+ public void setChapterName(String chapterName) {
+ this.chapterName = chapterName;
+ }
+
+ public boolean isCollect() {
+ return collect;
+ }
+
+ public void setCollect(boolean collect) {
+ this.collect = collect;
+ }
+
+ public int getCourseId() {
+ return courseId;
+ }
+
+ public void setCourseId(int courseId) {
+ this.courseId = courseId;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public String getEnvelopePic() {
+ return envelopePic;
+ }
+
+ public void setEnvelopePic(String envelopePic) {
+ this.envelopePic = envelopePic;
+ }
+
+ public boolean isFresh() {
+ return fresh;
+ }
+
+ public void setFresh(boolean fresh) {
+ this.fresh = fresh;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+
+ public String getNiceDate() {
+ return niceDate;
+ }
+
+ public void setNiceDate(String niceDate) {
+ this.niceDate = niceDate;
+ }
+
+ public String getNiceShareDate() {
+ return niceShareDate;
+ }
+
+ public void setNiceShareDate(String niceShareDate) {
+ this.niceShareDate = niceShareDate;
+ }
+
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
+ public String getPrefix() {
+ return prefix;
+ }
+
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ public String getProjectLink() {
+ return projectLink;
+ }
+
+ public void setProjectLink(String projectLink) {
+ this.projectLink = projectLink;
+ }
+
+ public long getPublishTime() {
+ return publishTime;
+ }
+
+ public void setPublishTime(long publishTime) {
+ this.publishTime = publishTime;
+ }
+
+ public int getSelfVisible() {
+ return selfVisible;
+ }
+
+ public void setSelfVisible(int selfVisible) {
+ this.selfVisible = selfVisible;
+ }
+
+ public long getShareDate() {
+ return shareDate;
+ }
+
+ public void setShareDate(long shareDate) {
+ this.shareDate = shareDate;
+ }
+
+ public String getShareUser() {
+ return shareUser;
+ }
+
+ public void setShareUser(String shareUser) {
+ this.shareUser = shareUser;
+ }
+
+ public int getSuperChapterId() {
+ return superChapterId;
+ }
+
+ public void setSuperChapterId(int superChapterId) {
+ this.superChapterId = superChapterId;
+ }
+
+ public String getSuperChapterName() {
+ return superChapterName;
+ }
+
+ public void setSuperChapterName(String superChapterName) {
+ this.superChapterName = superChapterName;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ public int getVisible() {
+ return visible;
+ }
+
+ public void setVisible(int visible) {
+ this.visible = visible;
+ }
+
+ public int getZan() {
+ return zan;
+ }
+
+ public void setZan(int zan) {
+ this.zan = zan;
+ }
+
+ public List> getTags() {
+ return tags;
+ }
+
+ public void setTags(List> tags) {
+ this.tags = tags;
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java
new file mode 100644
index 0000000..1bc4eff
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java
@@ -0,0 +1,95 @@
+package com.zhengsr.viewpagerhelper.bean;
+
+/**
+ * Created by zhengshaorui
+ * time: 2018/9/1
+ */
+
+public class BannerBean {
+ private String desc;
+ private int id;
+ private String imagePath;
+ private int isVisible;
+ private int order;
+ private String title;
+ private int type;
+ private String url;
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getImagePath() {
+ return imagePath;
+ }
+
+ public void setImagePath(String imagePath) {
+ this.imagePath = imagePath;
+ }
+
+ public int getIsVisible() {
+ return isVisible;
+ }
+
+ public void setIsVisible(int isVisible) {
+ this.isVisible = isVisible;
+ }
+
+ public int getOrder() {
+ return order;
+ }
+
+ public void setOrder(int order) {
+ this.order = order;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ @Override
+ public String toString() {
+ return "BannerBean{" +
+ "desc='" + desc + '\'' +
+ ", id=" + id +
+ ", imagePath='" + imagePath + '\'' +
+ ", isVisible=" + isVisible +
+ ", order=" + order +
+ ", title='" + title + '\'' +
+ ", type=" + type +
+ ", url='" + url + '\'' +
+ '}';
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java
new file mode 100644
index 0000000..888265b
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java
@@ -0,0 +1,42 @@
+package com.zhengsr.viewpagerhelper.bean;
+
+public class BaseResponse {
+ //自行去定义
+ public static final int SUCCESS = 0;
+ private T data;
+ private int errorCode;
+ private String errorMsg;
+
+ public T getData() {
+ return data;
+ }
+
+ public int getErrorCode() {
+ return errorCode;
+ }
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+ public void setErrorCode(int errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public String toString() {
+ return "BaseResponse{" +
+ "data=" + data +
+ ", errorCode=" + errorCode +
+ ", errorMsg='" + errorMsg + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java
new file mode 100644
index 0000000..6b12003
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java
@@ -0,0 +1,82 @@
+package com.zhengsr.viewpagerhelper.bean;
+
+/**
+ * @author by zhengshaorui on 2019/10/8
+ * Describe:
+ */
+public class PageDataInfo {
+ /**
+ * curPage : 1
+ * datas : []
+ * offset : 0
+ * over : false
+ * pageCount : 377
+ * size : 20
+ * total : 7522
+ */
+ private int curPage;
+ private int offset;
+ private boolean over;
+ private int pageCount;
+ private int size;
+ private int total;
+ private T datas;
+
+ public int getCurPage() {
+ return curPage;
+ }
+
+ public void setCurPage(int curPage) {
+ this.curPage = curPage;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+ public boolean isOver() {
+ return over;
+ }
+
+ public void setOver(boolean over) {
+ this.over = over;
+ }
+
+ public int getPageCount() {
+ return pageCount;
+ }
+
+ public void setPageCount(int pageCount) {
+ this.pageCount = pageCount;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public T getDatas() {
+ return datas;
+ }
+
+ public void setDatas(T datas) {
+ this.datas = datas;
+ }
+
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java
new file mode 100644
index 0000000..409e6f2
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java
@@ -0,0 +1,52 @@
+package com.zhengsr.viewpagerhelper.fragment;
+
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+/**
+ * Created by Administrator on 2017/11/10.
+ */
+
+public class CusFragment extends Fragment {
+
+ public static final String ARGUMENT = "argument";
+ private String mTitle;
+
+
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ Bundle bundle = getArguments();
+
+ TextView textView = new TextView(getActivity());
+ if (bundle != null){
+ textView.setText(bundle.getString(ARGUMENT));
+ }else{
+ textView.setText("nothing here");
+ }
+ textView.setTextSize(30);
+ textView.setGravity(Gravity.CENTER);
+ return textView;
+ }
+
+ /**
+ * 弄一个静态工厂的方法调用 用于传参
+ * @param key
+ * @return
+ */
+ public static CusFragment newInStance(String key){
+ CusFragment fragment = new CusFragment();
+ Bundle bundle = new Bundle();
+ bundle.putString(ARGUMENT,key);
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java
new file mode 100644
index 0000000..21ff307
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java
@@ -0,0 +1,41 @@
+package com.zhengsr.viewpagerhelper.rx;
+
+
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.fastjson.FastJsonConverterFactory;
+import retrofit2.converter.scalars.ScalarsConverterFactory;
+
+/**
+ * @author by zhengshaorui on 2019/10/9
+ * Describe: 网络生成类
+ */
+public class HttpCreate {
+
+ public static HttpServerApi getServer(){
+ Retrofit retrofit = new Retrofit.Builder()
+ //这里采用这个,因为有多个baseurl
+ .baseUrl("https://www.wanandroid.com/")
+ //转字符串
+ .addConverterFactory(ScalarsConverterFactory.create())
+ //fastjson
+ .addConverterFactory(FastJsonConverterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .client(OkHttpHolder.BUILDER)
+ .build();
+ return retrofit.create(HttpServerApi.class);
+ }
+
+ /**
+ * 配置okhttp3 client
+ */
+
+ private static class OkHttpHolder{
+ static OkHttpClient BUILDER = new OkHttpClient.Builder()
+ .connectTimeout(10, TimeUnit.SECONDS)
+ .build();
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java
new file mode 100644
index 0000000..ca1c3cc
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java
@@ -0,0 +1,43 @@
+package com.zhengsr.viewpagerhelper.rx;
+
+
+import com.zhengsr.viewpagerhelper.bean.ArticleData;
+import com.zhengsr.viewpagerhelper.bean.BannerBean;
+import com.zhengsr.viewpagerhelper.bean.BaseResponse;
+import com.zhengsr.viewpagerhelper.bean.PageDataInfo;
+
+import java.util.List;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+import retrofit2.http.Url;
+
+/**
+ * @author by zhengshaorui on 2019/10/9
+ * Describe: 统一网络服务接口类
+ */
+public interface HttpServerApi {
+ @GET
+ Observable getJson(@Url String url);
+
+
+ /**
+ * https://www.wanandroid.com/banner/json
+ * 获取 Banner 数据
+ * @return
+ */
+ @GET("banner/json")
+ Observable>> getBanner();
+
+ /**
+ * 获取文章
+ * https://www.wanandroid.com/article/list/num/json
+ * @param num 页码
+ * @return
+ */
+ @GET("article/list/{num}/json")
+ Observable>>> getArticle(@Path("num") int num);
+
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java
new file mode 100644
index 0000000..e56a716
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java
@@ -0,0 +1,98 @@
+package com.zhengsr.viewpagerhelper.rx;
+
+
+
+
+
+import com.zhengsr.viewpagerhelper.bean.BaseResponse;
+
+import org.reactivestreams.Publisher;
+
+import io.reactivex.Flowable;
+import io.reactivex.FlowableTransformer;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.ObservableSource;
+import io.reactivex.ObservableTransformer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Function;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * @author by zhengshaorui on 2019/10/9
+ * Describe:
+ */
+public class RxUtils {
+ /**
+ * 封装线程调度
+ * @param
+ * @return
+ */
+ public static ObservableTransformer rxScheduers(){
+ return new ObservableTransformer(){
+
+ @Override
+ public ObservableSource apply(Observable upstream) {
+ return upstream.subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+ };
+ }
+
+
+ public static FlowableTransformer flScheduers(){
+ return new FlowableTransformer() {
+ @Override
+ public Publisher apply(Flowable upstream) {
+ return upstream.subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+ };
+ }
+
+
+
+
+ /**
+ * 得到 Observable
+ * @param 指定的泛型类型
+ * @return Observable
+ */
+ private static Observable createData(final T t) {
+ return Observable.create(new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(ObservableEmitter emitter) throws Exception {
+ emitter.onNext(t);
+ emitter.onComplete();
+ }
+ });
+ }
+
+ /**
+ * 统一返回结果处理
+ * @param 指定的泛型类型
+ * @return ObservableTransformer
+ */
+ public static ObservableTransformer, T> handleResult() {
+
+ return new ObservableTransformer, T>() {
+ @Override
+ public ObservableSource apply(Observable> upstream) {
+ return upstream.flatMap(new Function, ObservableSource>() {
+ @Override
+ public ObservableSource apply(BaseResponse baseResponse) throws Exception {
+ if (baseResponse.getErrorCode() == BaseResponse.SUCCESS
+ && baseResponse.getData() != null
+ ) {
+ return createData(baseResponse.getData());
+ } else {
+ return Observable.error(new Exception(baseResponse.getErrorMsg()));
+ }
+ }
+ });
+
+ }
+ };
+ }
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java
new file mode 100644
index 0000000..babb5f4
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java
@@ -0,0 +1,66 @@
+package com.zhengsr.viewpagerhelper.tab;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerhelper.fragment.CusFragment;
+import com.zhengsr.viewpagerlib.indicator.TabIndicator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ColorTabActivity extends AppCompatActivity {
+ private List mFragments = new ArrayList<>();
+ private List mTitle = Arrays.asList("新闻","娱乐","学习",
+ "新闻","娱乐","学习",
+ "新闻","娱乐","学习");
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_colortab_page);
+
+ for (String string : mTitle) {
+ CusFragment fragment = CusFragment.newInStance(string);
+ mFragments.add(fragment);
+ }
+ final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
+ TabIndicator tritabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
+ viewPager.setAdapter(new CusAdapter(getSupportFragmentManager()));
+ // tritabIndecator.setTabData(viewPager,mTitle);
+ tritabIndecator.setViewPagerSwitchSpeed(viewPager,600);
+ tritabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() {
+ @Override
+ public void onClick(int position) {
+ viewPager.setCurrentItem(position);
+ }
+ });
+
+
+ }
+
+
+ class CusAdapter extends FragmentPagerAdapter {
+
+ public CusAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments.size();
+ }
+ }
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java
new file mode 100644
index 0000000..1f6c352
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java
@@ -0,0 +1,67 @@
+package com.zhengsr.viewpagerhelper.tab;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerhelper.fragment.CusFragment;
+import com.zhengsr.viewpagerlib.indicator.TabIndicator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class RectTabActivity extends AppCompatActivity {
+ private List mFragments = new ArrayList<>();
+ private List mTitle = Arrays.asList("新闻","娱乐","学习",
+ "Java","Android","Python",
+ "天才","蠢材","庸才");
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_recttab_page);
+
+ for (String string : mTitle) {
+ CusFragment fragment = CusFragment.newInStance(string);
+ mFragments.add(fragment);
+ }
+ final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
+ TabIndicator tritabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
+ viewPager.setAdapter(new CusAdapter(getSupportFragmentManager()));
+ tritabIndecator.setViewPagerSwitchSpeed(viewPager,600);
+ // 使用这个方法,则使用xml里面的控件
+ //tritabIndecator.setTabData(viewPager,new TabIndicator.TabClickListener()
+ tritabIndecator.setTabData(viewPager, mTitle,new TabIndicator.TabClickListener() {
+ @Override
+ public void onClick(int position) {
+ viewPager.setCurrentItem(position);
+ }
+ });
+
+
+ }
+
+
+ class CusAdapter extends FragmentPagerAdapter {
+
+ public CusAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments.size();
+ }
+ }
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java
new file mode 100644
index 0000000..e4097e1
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java
@@ -0,0 +1,42 @@
+package com.zhengsr.viewpagerhelper.tab;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+
+
+import com.zhengsr.viewpagerhelper.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TabActivity extends AppCompatActivity {
+ private List mFragments = new ArrayList<>();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_fragment_page);
+
+
+
+ }
+
+ public void tri(View view) {
+ startActivity(new Intent(this,TriTabActivity.class));
+ }
+
+ public void rect(View view) {
+ startActivity(new Intent(this,RectTabActivity.class));
+ }
+
+ public void color(View view) {
+ startActivity(new Intent(this,ColorTabActivity.class));
+ }
+
+
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java
new file mode 100644
index 0000000..9493766
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java
@@ -0,0 +1,67 @@
+package com.zhengsr.viewpagerhelper.tab;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerhelper.fragment.CusFragment;
+import com.zhengsr.viewpagerlib.indicator.TabIndicator;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class TriTabActivity extends AppCompatActivity {
+ private List mFragments = new ArrayList<>();
+ private List mTitle = Arrays.asList("新闻","娱乐","学习");
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_tritab_page);
+
+ for (String string : mTitle) {
+ CusFragment fragment = CusFragment.newInStance(string);
+ mFragments.add(fragment);
+ }
+ final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
+ viewPager.setAdapter(new CusAdapter(getSupportFragmentManager()));
+
+ TabIndicator tabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
+ //设置viewpager滑动速度
+ tabIndecator.setViewPagerSwitchSpeed(viewPager,600);
+ tabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() {
+ @Override
+ public void onClick(int position) {
+ //顶部点击的方法公布出来
+ viewPager.setCurrentItem(position);
+ }
+ });
+
+
+ }
+
+
+ class CusAdapter extends FragmentPagerAdapter {
+
+ public CusAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments.size();
+ }
+ }
+
+}
diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java
new file mode 100644
index 0000000..e00881c
--- /dev/null
+++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java
@@ -0,0 +1,73 @@
+package com.zhengsr.viewpagerhelper.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.Glide;
+import com.zhengsr.viewpagerhelper.R;
+import com.zhengsr.viewpagerhelper.bean.BannerBean;
+import com.zhengsr.viewpagerlib.callback.PageHelperListener;
+import com.zhengsr.viewpagerlib.indicator.CircleIndicator;
+import com.zhengsr.viewpagerlib.view.BannerViewPager;
+
+import java.util.List;
+
+/**
+ * Created by zhengshaorui
+ * time: 2018/9/2
+ */
+
+public class BannerView extends FrameLayout {
+
+
+ private View mView;
+ private BannerViewPager mBannerViewPager;
+
+ public BannerView(@NonNull Context context) {
+ this(context,null);
+ }
+
+ public BannerView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+
+ removeAllViews();
+ mView = LayoutInflater.from(getContext()).inflate(R.layout.banner_layout,this,false);
+ addView(mView);
+
+ mBannerViewPager = mView.findViewById(R.id.banner);
+ CircleIndicator indicator = mView.findViewById(R.id.banner_indicator);
+
+ mBannerViewPager.setCurrentPosition(1);
+
+ mBannerViewPager.addIndicator(indicator);
+ }
+
+
+ public void setData(List beans){
+ if (beans != null && beans.size() >0){
+
+ mBannerViewPager.setPageListener(R.layout.banner_item_layout, beans, new PageHelperListener() {
+ @Override
+ public void bindView(View view, BannerBean data, int position) {
+ // setText(view,R.id.banner_text,data.getTitle());
+ ImageView imageView = view.findViewById(R.id.banner_icon);
+ Glide.with(getContext())
+ .load(data.getImagePath())
+ .into(imageView);
+ }
+ });
+
+ }
+ }
+
+
+
+
+}
diff --git a/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml b/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/bottom_circle.xml b/appx/src/main/res/drawable/bottom_circle.xml
new file mode 100644
index 0000000..342d53e
--- /dev/null
+++ b/appx/src/main/res/drawable/bottom_circle.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/card_shape.xml b/appx/src/main/res/drawable/card_shape.xml
new file mode 100644
index 0000000..644465f
--- /dev/null
+++ b/appx/src/main/res/drawable/card_shape.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/glide_bottom_btn_bg.xml b/appx/src/main/res/drawable/glide_bottom_btn_bg.xml
new file mode 100644
index 0000000..8d43d9f
--- /dev/null
+++ b/appx/src/main/res/drawable/glide_bottom_btn_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/glide_bottom_selector.xml b/appx/src/main/res/drawable/glide_bottom_selector.xml
new file mode 100644
index 0000000..150e468
--- /dev/null
+++ b/appx/src/main/res/drawable/glide_bottom_selector.xml
@@ -0,0 +1,18 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/ic_launcher_background.xml b/appx/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/appx/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/drawable/select_tag.xml b/appx/src/main/res/drawable/select_tag.xml
new file mode 100644
index 0000000..880141f
--- /dev/null
+++ b/appx/src/main/res/drawable/select_tag.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/shape_back_ff_.xml b/appx/src/main/res/drawable/shape_back_ff_.xml
new file mode 100644
index 0000000..2bdd7b4
--- /dev/null
+++ b/appx/src/main/res/drawable/shape_back_ff_.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/shape_search.xml b/appx/src/main/res/drawable/shape_search.xml
new file mode 100644
index 0000000..37a88d5
--- /dev/null
+++ b/appx/src/main/res/drawable/shape_search.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/drawable/shape_search_select.xml b/appx/src/main/res/drawable/shape_search_select.xml
new file mode 100644
index 0000000..d5370aa
--- /dev/null
+++ b/appx/src/main/res/drawable/shape_search_select.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/activity_arc.xml b/appx/src/main/res/layout/activity_arc.xml
new file mode 100644
index 0000000..f89d789
--- /dev/null
+++ b/appx/src/main/res/layout/activity_arc.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_arc_loop.xml b/appx/src/main/res/layout/activity_arc_loop.xml
new file mode 100644
index 0000000..be3b75f
--- /dev/null
+++ b/appx/src/main/res/layout/activity_arc_loop.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_card_loop.xml b/appx/src/main/res/layout/activity_card_loop.xml
new file mode 100644
index 0000000..75a526d
--- /dev/null
+++ b/appx/src/main/res/layout/activity_card_loop.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_colortab_page.xml b/appx/src/main/res/layout/activity_colortab_page.xml
new file mode 100644
index 0000000..3f4a7d7
--- /dev/null
+++ b/appx/src/main/res/layout/activity_colortab_page.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_fragment_page.xml b/appx/src/main/res/layout/activity_fragment_page.xml
new file mode 100644
index 0000000..36e33f5
--- /dev/null
+++ b/appx/src/main/res/layout/activity_fragment_page.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_loop.xml b/appx/src/main/res/layout/activity_loop.xml
new file mode 100644
index 0000000..7c548a1
--- /dev/null
+++ b/appx/src/main/res/layout/activity_loop.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_main.xml b/appx/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..be8945d
--- /dev/null
+++ b/appx/src/main/res/layout/activity_main.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_mz_loop.xml b/appx/src/main/res/layout/activity_mz_loop.xml
new file mode 100644
index 0000000..4004440
--- /dev/null
+++ b/appx/src/main/res/layout/activity_mz_loop.xml
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_rect_inficator.xml b/appx/src/main/res/layout/activity_rect_inficator.xml
new file mode 100644
index 0000000..a19025f
--- /dev/null
+++ b/appx/src/main/res/layout/activity_rect_inficator.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_rect_text_loop.xml b/appx/src/main/res/layout/activity_rect_text_loop.xml
new file mode 100644
index 0000000..1d00e28
--- /dev/null
+++ b/appx/src/main/res/layout/activity_rect_text_loop.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_recttab_page.xml b/appx/src/main/res/layout/activity_recttab_page.xml
new file mode 100644
index 0000000..5182830
--- /dev/null
+++ b/appx/src/main/res/layout/activity_recttab_page.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_recyclerview.xml b/appx/src/main/res/layout/activity_recyclerview.xml
new file mode 100644
index 0000000..43e184e
--- /dev/null
+++ b/appx/src/main/res/layout/activity_recyclerview.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_scale_image.xml b/appx/src/main/res/layout/activity_scale_image.xml
new file mode 100644
index 0000000..dfd57e5
--- /dev/null
+++ b/appx/src/main/res/layout/activity_scale_image.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_tab.xml b/appx/src/main/res/layout/activity_tab.xml
new file mode 100644
index 0000000..fa23117
--- /dev/null
+++ b/appx/src/main/res/layout/activity_tab.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_text_indicator.xml b/appx/src/main/res/layout/activity_text_indicator.xml
new file mode 100644
index 0000000..efde212
--- /dev/null
+++ b/appx/src/main/res/layout/activity_text_indicator.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/activity_tritab_page.xml b/appx/src/main/res/layout/activity_tritab_page.xml
new file mode 100644
index 0000000..00e0a71
--- /dev/null
+++ b/appx/src/main/res/layout/activity_tritab_page.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/arc_loop_layout.xml b/appx/src/main/res/layout/arc_loop_layout.xml
new file mode 100644
index 0000000..d62a945
--- /dev/null
+++ b/appx/src/main/res/layout/arc_loop_layout.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/banner_item_layout.xml b/appx/src/main/res/layout/banner_item_layout.xml
new file mode 100644
index 0000000..40dda92
--- /dev/null
+++ b/appx/src/main/res/layout/banner_item_layout.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/banner_layout.xml b/appx/src/main/res/layout/banner_layout.xml
new file mode 100644
index 0000000..e692c0c
--- /dev/null
+++ b/appx/src/main/res/layout/banner_layout.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/fragment_layout.xml b/appx/src/main/res/layout/fragment_layout.xml
new file mode 100644
index 0000000..5bcd189
--- /dev/null
+++ b/appx/src/main/res/layout/fragment_layout.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/image_layout.xml b/appx/src/main/res/layout/image_layout.xml
new file mode 100644
index 0000000..4cd2573
--- /dev/null
+++ b/appx/src/main/res/layout/image_layout.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/item_article_recy_layout.xml b/appx/src/main/res/layout/item_article_recy_layout.xml
new file mode 100644
index 0000000..d3c4ac8
--- /dev/null
+++ b/appx/src/main/res/layout/item_article_recy_layout.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/appx/src/main/res/layout/item_card.xml b/appx/src/main/res/layout/item_card.xml
new file mode 100644
index 0000000..f093a65
--- /dev/null
+++ b/appx/src/main/res/layout/item_card.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/item_scaleview.xml b/appx/src/main/res/layout/item_scaleview.xml
new file mode 100644
index 0000000..102ce94
--- /dev/null
+++ b/appx/src/main/res/layout/item_scaleview.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/item_search_layout.xml b/appx/src/main/res/layout/item_search_layout.xml
new file mode 100644
index 0000000..d9511bc
--- /dev/null
+++ b/appx/src/main/res/layout/item_search_layout.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/item_tab_text.xml b/appx/src/main/res/layout/item_tab_text.xml
new file mode 100644
index 0000000..ae7fa9b
--- /dev/null
+++ b/appx/src/main/res/layout/item_tab_text.xml
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/item_textview.xml b/appx/src/main/res/layout/item_textview.xml
new file mode 100644
index 0000000..bf1dcdf
--- /dev/null
+++ b/appx/src/main/res/layout/item_textview.xml
@@ -0,0 +1,19 @@
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/layout/loop_layout.xml b/appx/src/main/res/layout/loop_layout.xml
new file mode 100644
index 0000000..6ca88f6
--- /dev/null
+++ b/appx/src/main/res/layout/loop_layout.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/appx/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/appx/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/appx/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/appx/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/main/res/mipmap-hdpi/ic_launcher.png b/appx/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/appx/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/appx/src/main/res/mipmap-hdpi/ic_launcher_round.png b/appx/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/appx/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/appx/src/main/res/mipmap-mdpi/ic_launcher.png b/appx/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/appx/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/appx/src/main/res/mipmap-mdpi/ic_launcher_round.png b/appx/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/appx/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/appx/src/main/res/mipmap-xhdpi/ic_launcher.png b/appx/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/appx/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/appx/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/appx/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/appx/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/beauty1.jpg b/appx/src/main/res/mipmap-xxhdpi/beauty1.jpg
new file mode 100644
index 0000000..e09875e
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/beauty1.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/beauty2.jpg b/appx/src/main/res/mipmap-xxhdpi/beauty2.jpg
new file mode 100644
index 0000000..f2ed77c
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/beauty2.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/beauty3.jpg b/appx/src/main/res/mipmap-xxhdpi/beauty3.jpg
new file mode 100644
index 0000000..b175558
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/beauty3.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/beauty4.jpg b/appx/src/main/res/mipmap-xxhdpi/beauty4.jpg
new file mode 100644
index 0000000..46d264e
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/beauty4.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/delete.png b/appx/src/main/res/mipmap-xxhdpi/delete.png
new file mode 100644
index 0000000..4cd9c57
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/delete.png differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/guide1.jpg b/appx/src/main/res/mipmap-xxhdpi/guide1.jpg
new file mode 100644
index 0000000..24f11ac
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/guide1.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/guide2.jpg b/appx/src/main/res/mipmap-xxhdpi/guide2.jpg
new file mode 100644
index 0000000..7272923
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/guide2.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/guide3.jpg b/appx/src/main/res/mipmap-xxhdpi/guide3.jpg
new file mode 100644
index 0000000..22ab970
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/guide3.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/guide4.jpg b/appx/src/main/res/mipmap-xxhdpi/guide4.jpg
new file mode 100644
index 0000000..0012e63
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/guide4.jpg differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/ic_launcher.png b/appx/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/appx/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/appx/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/appx/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/appx/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/appx/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/appx/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/appx/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/appx/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/appx/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/appx/src/main/res/values/colors.xml b/appx/src/main/res/values/colors.xml
new file mode 100644
index 0000000..011f989
--- /dev/null
+++ b/appx/src/main/res/values/colors.xml
@@ -0,0 +1,155 @@
+
+
+
+ #3F51B5
+ #303F9F
+ #FF4081
+ #ffffff
+ #b0f1ffff
+ #ded2d2
+ #b01a1a1a
+ #00000000
+ #FFFFF0
+ #FFFFE0
+ #FFFF00
+ #FFFAFA
+ #FFFAF0
+ #FFFACD
+ #FFF8DC
+ #FFF5EE
+ #FFF0F5
+ #FFEFD5
+ #FFEBCD
+ #FFE4E1
+ #FFE4C4
+ #FFE4B5
+ #FFDEAD
+ #FFDAB9
+ #FFD700
+ #FFC0CB
+ #FFB6C1
+ #FFA500
+ #FFA07A
+ #FF8C00
+ #FF7F50
+ #FF69B4
+ #FF6347
+ #FF4500
+ #FF1493
+ #FF00FF
+ #FF0000
+ #FDF5E6
+ #FAFAD2
+ #FAF0E6
+ #FAEBD7
+ #FA8072
+ #F8F8FF
+ #F5FFFA
+ #F5F5F5
+ #F5F5DC
+ #F5DEB3
+ #F4A460
+ #F0FFFF
+ #F0FFF0
+ #F0F8FF
+ #F0E68C
+ #F08080
+ #EEE8AA
+ #EE82EE
+ #E9967A
+ #E6E6FA
+ #E0FFFF
+ #DEB887
+ #DDA0DD
+ #DCDCDC
+ #DC143C
+ #DB7093
+ #DAA520
+ #DA70D6
+ #D8BFD8
+ #D3D3D3
+ #D2B48C
+ #D2691E
+ #CD853F
+ #CD5C5C
+ #C71585
+ #C0C0C0
+ #BDB76B
+ #BC8F8F
+ #BA55D3
+ #B8860B
+ #B22222
+ #B0E0E6
+ #B0C4DE
+ #AFEEEE
+ #ADFF2F
+ #ADD8E6
+ #A9A9A9
+ #A52A2A
+ #A0522D
+ #9932CC
+ #98FB98
+ #9400D3
+ #9370DB
+ #90EE90
+ #8FBC8F
+ #8B4513
+ #8B008B
+ #8B0000
+ #8A2BE2
+ #87CEFA
+ #87CEEB
+ #808080
+ #808000
+ #800080
+ #800000
+ #7FFFD4
+ #7FFF00
+ #7CFC00
+ #7B68EE
+ #778899
+ #708090
+ #6B8E23
+ #6A5ACD
+ #696969
+ #66CDAA
+ #6495ED
+ #5F9EA0
+ #556B2F
+ #4B0082
+ #48D1CC
+ #483D8B
+ #4682B4
+ #4169E1
+ #40E0D0
+ #3CB371
+ #32CD32
+ #2F4F4F
+ #2E8B57
+ #228B22
+ #20B2AA
+ #1E90FF
+ #191970
+ #00FFFF
+ #00FFFF
+ #00FF7F
+ #00FF00
+ #00FA9A
+ #00CED1
+ #00BFFF
+ #008B8B
+ #008080
+ #008000
+ #006400
+ #0000FF
+ #0000CD
+ #00008B
+ #000080
+ #000000
+ #99cc33
+ #cccccc
+ #a0f3ecec
+ #8f8f8f
+ #2b8fff
+ #323232
+
\ No newline at end of file
diff --git a/appx/src/main/res/values/strings.xml b/appx/src/main/res/values/strings.xml
new file mode 100644
index 0000000..782141c
--- /dev/null
+++ b/appx/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ appx
+
\ No newline at end of file
diff --git a/appx/src/main/res/values/styles.xml b/appx/src/main/res/values/styles.xml
new file mode 100644
index 0000000..fac9291
--- /dev/null
+++ b/appx/src/main/res/values/styles.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/appx/src/test/java/com/zhengsr/viewpagerhelper/ExampleUnitTest.kt b/appx/src/test/java/com/zhengsr/viewpagerhelper/ExampleUnitTest.kt
new file mode 100644
index 0000000..e085639
--- /dev/null
+++ b/appx/src/test/java/com/zhengsr/viewpagerhelper/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.zhengsr.viewpagerhelper
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index aac7c9b..412a96f 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -15,3 +15,9 @@ org.gradle.jvmargs=-Xmx1536m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=false
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
diff --git a/settings.gradle b/settings.gradle
index 2ab6b70..9d9e912 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,4 @@
+include ':appx'
include ':viewpagerlibx'
include ':kotlinlib'
include ':app', ':viewpagerlib'
diff --git a/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java b/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
index 1ef2596..3f68e53 100644
--- a/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
+++ b/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
@@ -25,10 +25,12 @@ public void transformPage(@NonNull View view, float position) {
}else {
view.setTranslationX(-view.getWidth() * position);
float scale = (view.getWidth() - mCardHeight * position) / view.getWidth();
- view.setScaleX(scale);
- view.setScaleY(scale);
- view.setClickable(false);
- view.setTranslationY(mCardHeight * position);
+ if (scale >0 && scale < 1) {
+ view.setScaleX(scale);
+ view.setScaleY(scale);
+ view.setClickable(false);
+ view.setTranslationY(mCardHeight * position);
+ }
}
}
diff --git a/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java b/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
index c13e89e..138b1da 100644
--- a/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
+++ b/viewpagerlib/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
@@ -1,8 +1,8 @@
package com.zhengsr.viewpagerlib.anim;
+import android.support.v4.view.ViewPager;
import android.view.View;
-import androidx.viewpager.widget.ViewPager;
public class DepthPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.75f;
diff --git a/viewpagerlib/viewpagerlib.iml b/viewpagerlib/viewpagerlib.iml
index 42e6ab0..7910c00 100644
--- a/viewpagerlib/viewpagerlib.iml
+++ b/viewpagerlib/viewpagerlib.iml
@@ -96,40 +96,40 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/ViewPagerHelperUtils.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/ViewPagerHelperUtils.java
index 534e191..9a01fc4 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/ViewPagerHelperUtils.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/ViewPagerHelperUtils.java
@@ -3,7 +3,11 @@
import android.content.Context;
import android.widget.Scroller;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSmoothScroller;
+import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
import java.lang.reflect.Field;
@@ -56,4 +60,63 @@ public void startScroll(int startX, int startY, int dx, int dy, int duration) {
}
}
+
+ public static void initSwitchTime(Context context,ViewPager2 viewPager2,int time) {
+ try {
+ //控制切换速度,采用反射方。法方法只会调用一次,替换掉内部的RecyclerView的LinearLayoutManager
+ RecyclerView recyclerView = (RecyclerView) viewPager2.getChildAt(0);
+ recyclerView.setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
+ ProxyLayoutManger proxyLayoutManger = new ProxyLayoutManger(context, viewPager2.getOrientation(),time);
+ recyclerView.setLayoutManager(proxyLayoutManger);
+
+ Field LayoutMangerField = ViewPager2.class.getDeclaredField("mLayoutManager");
+ LayoutMangerField.setAccessible(true);
+ LayoutMangerField.set(viewPager2, proxyLayoutManger);
+
+ Field pageTransformerAdapterField = ViewPager2.class.getDeclaredField("mPageTransformerAdapter");
+ pageTransformerAdapterField.setAccessible(true);
+ Object mPageTransformerAdapter = pageTransformerAdapterField.get(viewPager2);
+ if (mPageTransformerAdapter != null) {
+ Class> aClass = mPageTransformerAdapter.getClass();
+ Field layoutManager = aClass.getDeclaredField("mLayoutManager");
+ layoutManager.setAccessible(true);
+ layoutManager.set(mPageTransformerAdapter, proxyLayoutManger);
+ }
+ Field scrollEventAdapterField = ViewPager2.class.getDeclaredField("mScrollEventAdapter");
+ scrollEventAdapterField.setAccessible(true);
+ Object mScrollEventAdapter = scrollEventAdapterField.get(viewPager2);
+ if (mScrollEventAdapter != null) {
+ Class> aClass = mScrollEventAdapter.getClass();
+ Field layoutManager = aClass.getDeclaredField("mLayoutManager");
+ layoutManager.setAccessible(true);
+ layoutManager.set(mScrollEventAdapter, proxyLayoutManger);
+ }
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static class ProxyLayoutManger extends LinearLayoutManager {
+
+ int time;
+ ProxyLayoutManger(Context context, int orientation,int time) {
+ super(context, orientation, false);
+ this.time = time;
+ }
+
+ @Override
+ public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
+ LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {
+ @Override
+ protected int calculateTimeForDeceleration(int dx) {
+ return (int) (time * (1 - .3356));
+ }
+ };
+ linearSmoothScroller.setTargetPosition(position);
+ startSmoothScroll(linearSmoothScroller);
+ }
+ }
+
}
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
index 76fd140..6990c7a 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/CardTransformer.java
@@ -1,5 +1,6 @@
package com.zhengsr.viewpagerlib.anim;
+import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
@@ -9,7 +10,7 @@
* created by zhengsr on 2019/8/11
* Describe: 卡片式viewpager
*/
-public class CardTransformer implements ViewPager.PageTransformer {
+public class CardTransformer extends Itransformer {
private static final String TAG = "CardTransformer";
private float mCardHeight = 10;
@@ -17,19 +18,20 @@ public CardTransformer(float cardheight) {
this.mCardHeight = cardheight;
}
+
@Override
- public void transformPage(@NonNull View view, float position) {
+ void transform(View view, float position) {
if (position <= 0){
view.setTranslationX(0f);
view.setClickable(true);
}else {
view.setTranslationX(-view.getWidth() * position);
float scale = (view.getWidth() - mCardHeight * position) / view.getWidth();
+ Log.d(TAG, "zsr transform: "+scale);
view.setScaleX(scale);
view.setScaleY(scale);
view.setClickable(false);
view.setTranslationY(mCardHeight * position);
}
-
}
}
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
index c13e89e..e6e324f 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/DepthPageTransformer.java
@@ -4,40 +4,41 @@
import androidx.viewpager.widget.ViewPager;
-public class DepthPageTransformer implements ViewPager.PageTransformer {
- private static final float MIN_SCALE = 0.75f;
-
+public class DepthPageTransformer extends Itransformer {
+ private static final float MIN_SCALE = 0.75f;
+
+
@Override
- public void transformPage(View view, float position) {
- int pageWidth = view.getWidth();
-
- if (position < -1) { // [-Infinity,-1)
- // This page is way off-screen to the left.
- view.setAlpha(0);
-
- } else if (position <= 0) { // [-1,0]
- // Use the default slide transition when moving to the left page
- view.setAlpha(1);
- view.setTranslationX(0);
- view.setScaleX(1);
- view.setScaleY(1);
-
- } else if (position <= 1) { // (0,1]
- // Fade the page out.
- view.setAlpha(1 - position);
-
- // Counteract the default slide transition
- view.setTranslationX(pageWidth * -position);
-
- // Scale the page down (between MIN_SCALE and 1)
- float scaleFactor = MIN_SCALE
- + (1 - MIN_SCALE) * (1 - Math.abs(position));
- view.setScaleX(scaleFactor);
- view.setScaleY(scaleFactor);
-
- } else { // (1,+Infinity]
- // This page is way off-screen to the right.
- view.setAlpha(0);
- }
- }
-}
\ No newline at end of file
+ void transform(View view, float position) {
+ int pageWidth = view.getWidth();
+
+ if (position < -1) { // [-Infinity,-1)
+ // This page is way off-screen to the left.
+ view.setAlpha(0);
+
+ } else if (position <= 0) { // [-1,0]
+ // Use the default slide transition when moving to the left page
+ view.setAlpha(1);
+ view.setTranslationX(0);
+ view.setScaleX(1);
+ view.setScaleY(1);
+
+ } else if (position <= 1) { // (0,1]
+ // Fade the page out.
+ view.setAlpha(1 - position);
+
+ // Counteract the default slide transition
+ view.setTranslationX(pageWidth * -position);
+
+ // Scale the page down (between MIN_SCALE and 1)
+ float scaleFactor = MIN_SCALE
+ + (1 - MIN_SCALE) * (1 - Math.abs(position));
+ view.setScaleX(scaleFactor);
+ view.setScaleY(scaleFactor);
+
+ } else { // (1,+Infinity]
+ // This page is way off-screen to the right.
+ view.setAlpha(0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/Itransformer.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/Itransformer.java
new file mode 100644
index 0000000..6740cbc
--- /dev/null
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/Itransformer.java
@@ -0,0 +1,35 @@
+package com.zhengsr.viewpagerlib.anim;
+
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * @author by zhengshaorui 2020/9/6 12:04
+ * describe:
+ */
+public abstract class Itransformer {
+ public ViewPager2.PageTransformer getTransformer2(){
+ return new ViewPager2.PageTransformer() {
+ @Override
+ public void transformPage(@NonNull View page, float position) {
+ transform(page,position);
+ }
+ };
+ }
+
+
+
+ public ViewPager.PageTransformer getTransformer(){
+ return new ViewPager.PageTransformer() {
+ @Override
+ public void transformPage(@NonNull View page, float position) {
+ transform(page, position);
+ }
+ };
+ }
+
+ abstract void transform(View view, float position);
+}
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/MzTransformer.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/MzTransformer.java
index 87e2d0a..7e5129b 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/MzTransformer.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/MzTransformer.java
@@ -2,17 +2,25 @@
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
/**
* Created by Administrator on 2017/11/8.
*/
-public class MzTransformer implements ViewPager.PageTransformer {
+public class MzTransformer extends Itransformer {
private static final float MAX_SCALE = 1.0f;
private static final float MIN_SCALE = 0.9f;//0.85f
+
+
+
+
+
+
@Override
- public void transformPage(View view, float position) {
+ public void transform(View view, float position) {
//setScaleY只支持api11以上
if (position < -1) {
// view.setScaleX(MIN_SCALE);
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/ZoomOutPageTransformer.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/ZoomOutPageTransformer.java
index 61d5413..0afcb38 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/ZoomOutPageTransformer.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/anim/ZoomOutPageTransformer.java
@@ -4,53 +4,56 @@
import android.util.Log;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
-public class ZoomOutPageTransformer implements ViewPager.PageTransformer
-{
+public class ZoomOutPageTransformer extends Itransformer {
private static final float MIN_SCALE = 0.85f;
- private static final float MIN_ALPHA = 0.5f;
-
+ private static final float MIN_ALPHA = 0.5f;
+
+
@Override
- @SuppressLint("NewApi")
- public void transformPage(View view, float position)
- {
- int pageWidth = view.getWidth();
- int pageHeight = view.getHeight();
-
- Log.e("TAG", view + " , " + position + "");
-
- if (position < -1)
- { // [-Infinity,-1)
- // This page is way off-screen to the left.
- view.setAlpha(0);
-
- } else if (position <= 1) //a页滑动至b页 ; a页从 0.0 -1 ;b页从1 ~ 0.0
- { // [-1,1]
- // Modify the default slide transition to shrink the page as well
- float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
- float vertMargin = pageHeight * (1 - scaleFactor) / 2;
- float horzMargin = pageWidth * (1 - scaleFactor) / 2;
- if (position < 0)
- {
- view.setTranslationX(horzMargin - vertMargin / 2);
- } else
- {
- view.setTranslationX(-horzMargin + vertMargin / 2);
- }
-
- // Scale the page down (between MIN_SCALE and 1)
- view.setScaleX(scaleFactor);
- view.setScaleY(scaleFactor);
-
- // Fade the page relative to its size.
- view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)
- / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
-
- } else
- { // (1,+Infinity]
- // This page is way off-screen to the right.
- view.setAlpha(0);
- }
- }
+ public void transform(View view, float position) {
+ int pageWidth = view.getWidth();
+ int pageHeight = view.getHeight();
+
+
+ if (position < -1)
+ { // [-Infinity,-1)
+ // This page is way off-screen to the left.
+ view.setAlpha(0);
+
+ } else if (position <= 1) //a页滑动至b页 ; a页从 0.0 -1 ;b页从1 ~ 0.0
+ { // [-1,1]
+ // Modify the default slide transition to shrink the page as well
+ float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
+ float vertMargin = pageHeight * (1 - scaleFactor) / 2;
+ float horzMargin = pageWidth * (1 - scaleFactor) / 2;
+ if (position < 0)
+ {
+ view.setTranslationX(horzMargin - vertMargin / 2);
+ } else
+ {
+ view.setTranslationX(-horzMargin + vertMargin / 2);
+ }
+
+ // Scale the page down (between MIN_SCALE and 1)
+ view.setScaleX(scaleFactor);
+ view.setScaleY(scaleFactor);
+
+ // Fade the page relative to its size.
+ view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)
+ / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
+
+ } else
+ { // (1,+Infinity]
+ // This page is way off-screen to the right.
+ view.setAlpha(0);
+ }
+ }
+
+
+
+
}
\ No newline at end of file
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/CircleIndicator.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/CircleIndicator.java
index 7a45d42..81d8cc9 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/CircleIndicator.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/CircleIndicator.java
@@ -20,6 +20,7 @@
import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
import com.zhengsr.viewpagerlib.R;
import com.zhengsr.viewpagerlib.bean.CirBean;
@@ -60,6 +61,7 @@ public class CircleIndicator extends LinearLayout {
private int mMoveSize;
private int mLastPosition = 0;
private ViewPager mViewPager;
+ private ViewPager2 mViewPager2;
public CircleIndicator(Context context) {
this(context, null);
@@ -109,6 +111,41 @@ public CircleIndicator(Context context, @Nullable AttributeSet attrs, int defSty
*/
public void addPagerData(int count, ViewPager viewPager) {
+ mViewPager = viewPager;
+ if (configView(count)) {
+ return;
+ }
+ if (viewPager != null) {
+ viewPager.addOnPageChangeListener(new PagerListener());
+ }
+ }
+
+ public void addPagerData(int count, ViewPager2 viewPager2){
+ mViewPager2 = viewPager2;
+ if (configView(count)) {
+ return;
+ }
+ if (viewPager2 != null) {
+ viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ circleScroll(position, positionOffset);
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (!isCanMove) {
+ moveToPosition(position);
+ }
+ }
+
+ });
+ }
+
+ }
+
+ private boolean configView(int count) {
/**
* 还原一些状态
*/
@@ -116,9 +153,8 @@ public void addPagerData(int count, ViewPager viewPager) {
mMoveDistance = 0;
if (count == 0) {
- return;
+ return true;
}
- mViewPager = viewPager;
mCount = count;
GradientDrawable drawable = new GradientDrawable();
@@ -141,11 +177,12 @@ public void addPagerData(int count, ViewPager viewPager) {
imageView.setLayoutParams(params);
addView(imageView);
}
- if (viewPager != null) {
- viewPager.addOnPageChangeListener(new PagerListener());
- }
+ return false;
}
+
+
+
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
@@ -169,14 +206,17 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) {
mRect.set(cl, ct, cr, cb);
mMoveSize = mMargin + mSize;
- int currentItem = mViewPager.getCurrentItem();
+ //int currentItem = mViewPager.getCurrentItem();
+ int currentItem = mViewPager != null ? mViewPager.getCurrentItem():mViewPager2.getCurrentItem();
+
if (mType == CircleIndicatorType.SCALE) {
if (currentItem % mCount == 0) {
doScaleAnim(child, ANIM_OUT);
}
}
- moveToPosition(mViewPager.getCurrentItem());
+ // moveToPosition(mViewPager.getCurrentItem());
+ moveToPosition(currentItem);
}
}
@@ -235,17 +275,7 @@ class PagerListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- /**
- * 由于距离时确定的,所以很好判断移动的渐变
- */
- if (isCanMove) {
- if (position % mCount == (mCount - 1) && positionOffset > 0) {
- mMoveDistance = 0;
- } else {
- mMoveDistance = (int) (positionOffset * mMoveSize + position % mCount * mMoveSize);
- }
- invalidate();
- }
+ circleScroll(position, positionOffset);
}
@Override
@@ -261,6 +291,20 @@ public void onPageScrollStateChanged(int i) {
}
}
+ private void circleScroll(int position, float positionOffset) {
+ /**
+ * 由于距离时确定的,所以很好判断移动的渐变
+ */
+ if (isCanMove) {
+ if (position % mCount == (mCount - 1) && positionOffset > 0) {
+ mMoveDistance = 0;
+ } else {
+ mMoveDistance = (int) (positionOffset * mMoveSize + position % mCount * mMoveSize);
+ }
+ invalidate();
+ }
+ }
+
private void moveToPosition(int position) {
/**
* 处理不移动的情况
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/RectIndicator.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/RectIndicator.java
index 540df84..0ea2e16 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/RectIndicator.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/indicator/RectIndicator.java
@@ -15,6 +15,7 @@
import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.ViewPager2;
import com.zhengsr.viewpagerlib.R;
import com.zhengsr.viewpagerlib.bean.RectBean;
@@ -46,6 +47,7 @@ public class RectIndicator extends LinearLayout {
private RectF mRect;
private Paint mPaint;
private ViewPager mViewPager;
+ private ViewPager2 mViewPager2;
public RectIndicator(Context context) {
@@ -86,12 +88,44 @@ public RectIndicator(Context context, @Nullable AttributeSet attrs, int defStyle
*/
public void addPagerData(int count, ViewPager viewPager) {
+ mViewPager = viewPager;
+ if (configView(count)) {
+ return;
+ }
+ if (viewPager != null) {
+ viewPager.addOnPageChangeListener(new PagerListener());
+ }
+ }
+
+ public void addPagerData(int count, ViewPager2 viewPager2) {
+
+ mViewPager2 = viewPager2;
+ if (configView(count)) {
+ return;
+ }
+ if (viewPager2 != null) {
+ viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ rectScroll(position, positionOffset);
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (!isCanMove) {
+ moveToPosition(position);
+ }
+ }
+ });
+ }
+ }
+
+ private boolean configView(int count) {
removeAllViews();
if (count == 0) {
- return;
+ return true;
}
mCount = count;
- mViewPager = viewPager;
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setSize(mRectWidth, mRectHeight);
@@ -113,9 +147,7 @@ public void addPagerData(int count, ViewPager viewPager) {
imageView.setLayoutParams(params);
addView(imageView);
}
- if (viewPager != null) {
- viewPager.addOnPageChangeListener(new PagerListener());
- }
+ return false;
}
@Override
@@ -129,7 +161,8 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) {
float cb = ct + child.getMeasuredHeight();
mRect.set(cl, ct, cr, cb);
mMoveSize = mMargin + mRectWidth;
- moveToPosition(mViewPager.getCurrentItem());
+ int currentItem = mViewPager != null ? mViewPager.getCurrentItem():mViewPager2.getCurrentItem();
+ moveToPosition(currentItem);
}
}
@@ -183,17 +216,7 @@ class PagerListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- /**
- * 由于距离时确定的,所以很好判断移动的渐变
- */
- if (isCanMove) {
- if (position % mCount == (mCount - 1) && positionOffset > 0) {
- mMoveDistance = 0;
- } else {
- mMoveDistance = (int) (positionOffset * mMoveSize + position % mCount * mMoveSize);
- }
- invalidate();
- }
+ rectScroll(position, positionOffset);
}
@Override
@@ -209,6 +232,20 @@ public void onPageScrollStateChanged(int i) {
}
}
+ private void rectScroll(int position, float positionOffset) {
+ /**
+ * 由于距离时确定的,所以很好判断移动的渐变
+ */
+ if (isCanMove) {
+ if (position % mCount == (mCount - 1) && positionOffset > 0) {
+ mMoveDistance = 0;
+ } else {
+ mMoveDistance = (int) (positionOffset * mMoveSize + position % mCount * mMoveSize);
+ }
+ invalidate();
+ }
+ }
+
private void moveToPosition(int position) {
/**
* 处理不移动的情况
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager.java
index 339ff8a..259a304 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager.java
@@ -22,6 +22,7 @@
import com.zhengsr.viewpagerlib.ViewPagerHelperUtils;
import com.zhengsr.viewpagerlib.anim.CardTransformer;
import com.zhengsr.viewpagerlib.anim.DepthPageTransformer;
+import com.zhengsr.viewpagerlib.anim.Itransformer;
import com.zhengsr.viewpagerlib.anim.MzTransformer;
import com.zhengsr.viewpagerlib.anim.ZoomOutPageTransformer;
import com.zhengsr.viewpagerlib.bean.PageBean;
@@ -334,22 +335,30 @@ public void startAnim() {
* @param transformer
*/
private void setTransformer(BannerTransType transformer, int cardHeight) {
+ Itransformer itransformer = null;
switch (transformer) {
case CARD:
- setPageTransformer(true, new CardTransformer(cardHeight));
+ itransformer = new CardTransformer(cardHeight);
break;
case MZ:
- setPageTransformer(false, new MzTransformer());
+ itransformer = new MzTransformer();
break;
case ZOOM:
- setPageTransformer(false, new ZoomOutPageTransformer());
+ itransformer = new ZoomOutPageTransformer();
break;
case DEPATH:
- setPageTransformer(false, new DepthPageTransformer());
+ itransformer = new DepthPageTransformer();
break;
default:
break;
}
+ if (itransformer != null) {
+ if (itransformer instanceof CardTransformer){
+ setPageTransformer(true,itransformer.getTransformer());
+ }else {
+ setPageTransformer(false,itransformer.getTransformer());
+ }
+ }
}
diff --git a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager2.java b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager2.java
index aac925d..53f2fa1 100644
--- a/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager2.java
+++ b/viewpagerlibx/src/main/java/com/zhengsr/viewpagerlib/view/BannerViewPager2.java
@@ -8,23 +8,27 @@
import android.os.Message;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
+import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.widget.MarginPageTransformer;
import androidx.viewpager2.widget.ViewPager2;
import com.zhengsr.viewpagerlib.R;
import com.zhengsr.viewpagerlib.ViewPagerHelperUtils;
import com.zhengsr.viewpagerlib.anim.CardTransformer;
import com.zhengsr.viewpagerlib.anim.DepthPageTransformer;
+import com.zhengsr.viewpagerlib.anim.Itransformer;
import com.zhengsr.viewpagerlib.anim.MzTransformer;
import com.zhengsr.viewpagerlib.anim.ZoomOutPageTransformer;
import com.zhengsr.viewpagerlib.bean.PageBean;
@@ -44,7 +48,7 @@
* gai该类用来支持 viewpager2
*/
-public class BannerViewPager2 extends ViewPager2 {
+public class BannerViewPager2 extends FrameLayout {
/**
* const
*/
@@ -71,6 +75,7 @@ public class BannerViewPager2 extends ViewPager2 {
private LayoutInflater mInflater;
private Rect mScreentRect;
private View mCurrentContent;
+ private int mLeftMargin,mRightMargin;
private List