Procházet zdrojové kódy

Changed animation for fab button

Vadik Sirekanyan před 7 roky
rodič
revize
17f454d4ef

+ 2 - 12
app/src/main/java/com/sirekanyan/knigopis/feature/books/BooksView.kt

@@ -1,7 +1,6 @@
 package com.sirekanyan.knigopis.feature.books
 
 import android.support.v7.app.AlertDialog
-import android.support.v7.widget.RecyclerView
 import android.view.View
 import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.common.android.dialog.DialogFactory
@@ -53,17 +52,8 @@ class BooksViewImpl(
     init {
         booksRecyclerView.adapter = booksAdapter
         booksRecyclerView.addItemDecoration(HeaderItemDecoration(StickyHeaderImpl(booksAdapter)))
-        addBookButton.setOnClickListener {
-            callbacks.onAddBookClicked()
-        }
-        booksRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
-            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
-                when {
-                    dy > 0 -> addBookButton.hide()
-                    dy < 0 -> addBookButton.show()
-                }
-            }
-        })
+        booksRecyclerView.addOnScrollListener(FabOnScrollListener(resources, addBookButton))
+        addBookButton.setOnClickListener { callbacks.onAddBookClicked() }
     }
 
     override fun updateBooks(books: List<BookModel>) {

+ 39 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/books/FabOnScrollListener.kt

@@ -0,0 +1,39 @@
+package com.sirekanyan.knigopis.feature.books
+
+import android.content.res.Resources
+import android.support.v7.widget.RecyclerView
+import android.view.View
+import android.view.animation.DecelerateInterpolator
+import com.sirekanyan.knigopis.R
+
+class FabOnScrollListener(resources: Resources, fab: View) : RecyclerView.OnScrollListener() {
+
+    private val offsetX = resources.getDimensionPixelSize(R.dimen.fab_offset_x).toFloat()
+    private val offsetY = resources.getDimensionPixelSize(R.dimen.fab_offset_y).toFloat()
+    private val hideAnimator = fab.animate()
+    private val showAnimator = fab.animate()
+    private var isHiding = false
+    private var isShowing = false
+
+    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
+        when {
+            dy > 0 && !isHiding -> {
+                isHiding = true
+                isShowing = false
+                showAnimator.cancel()
+                hideAnimator.translationX(offsetX).translationY(offsetY)
+                    .setInterpolator(DecelerateInterpolator())
+                    .withEndAction { isHiding = false }
+            }
+            dy < 0 && !isShowing -> {
+                isShowing = true
+                isHiding = false
+                hideAnimator.cancel()
+                showAnimator.translationX(0f).translationY(0f)
+                    .setInterpolator(DecelerateInterpolator())
+                    .withEndAction { isShowing = false }
+            }
+        }
+    }
+
+}

+ 4 - 0
app/src/main/res/values/dimens.xml

@@ -4,6 +4,10 @@
     <dimen name="activity_horizontal_margin">16dp</dimen>
     <dimen name="activity_vertical_margin">16dp</dimen>
 
+    <!-- books -->
+    <dimen name="fab_offset_x">44dp</dimen>
+    <dimen name="fab_offset_y">72dp</dimen>
+
     <!-- user avatar -->
     <dimen name="avatar_size_expanded">88dp</dimen>
     <dimen name="toolbar_height">56dp</dimen>