use MaterialContainerTransform for ActionButton animation (#1961)

* use MaterialContainerTransform for ActionButton animation

* fix back button in TabPreferenceActivity
main
Konrad Pozniak 4 years ago committed by Alibek Omarov
parent 7063060a2d
commit 8b3c9a8f09
  1. 2
      app/build.gradle
  2. 36
      app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt
  3. 12
      app/src/main/res/layout/activity_tab_preference.xml

@ -146,7 +146,7 @@ dependencies {
implementation "androidx.room:room-rxjava2:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
implementation "com.google.android.material:material:1.2.0"
implementation "com.google.android.material:material:1.2.1"
implementation 'com.google.android:flexbox:2.0.1'
implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"

@ -15,19 +15,25 @@
package com.keylesspalace.tusky
import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import android.view.View
import android.widget.FrameLayout
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatEditText
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.transition.TransitionManager
import at.connyduck.sparkbutton.helpers.Utils
import com.google.android.material.transition.MaterialArcMotion
import com.google.android.material.transition.MaterialContainerTransform
import com.keylesspalace.tusky.adapter.ItemInteractionListener
import com.keylesspalace.tusky.adapter.ListSelectionAdapter
import com.keylesspalace.tusky.adapter.TabAdapter
@ -129,19 +135,17 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
touchHelper.attachToRecyclerView(currentTabsRecyclerView)
actionButton.setOnClickListener {
actionButton.isExpanded = true
toggleFab(true)
}
scrim.setOnClickListener {
actionButton.isExpanded = false
toggleFab(false)
}
maxTabsInfo.text = getString(R.string.max_tab_number_reached, MAX_TAB_COUNT)
updateAvailableTabs()
}
override fun onTabAdded(tab: TabData) {
@ -150,7 +154,7 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
return
}
actionButton.isExpanded = false
toggleFab(false)
if (tab.id == HASHTAG) {
showAddHashtagDialog()
@ -188,6 +192,22 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
currentTabsAdapter.notifyItemChanged(tabPosition)
}
private fun toggleFab(expand: Boolean) {
val transition = MaterialContainerTransform().apply {
startView = if (expand) actionButton else sheet
val endView: View = if (expand) sheet else actionButton
this.endView = endView
addTarget(endView)
scrimColor = Color.TRANSPARENT
setPathMotion(MaterialArcMotion())
}
TransitionManager.beginDelayedTransition(tabPreferenceContainer, transition)
actionButton.visible(!expand)
sheet.visible(expand)
scrim.visible(expand)
}
private fun showAddHashtagDialog(tab: TabData? = null, tabPosition: Int = 0) {
val frameLayout = FrameLayout(this)
@ -322,10 +342,10 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
}
override fun onBackPressed() {
if (actionButton.isExpanded) {
actionButton.isExpanded = false
} else {
if (actionButton.isVisible) {
super.onBackPressed()
} else {
toggleFab(false)
}
}

@ -2,6 +2,7 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tabPreferenceContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -19,8 +20,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/scrimBackground"
android:visibility="invisible"
app:layout_behavior="@string/fab_transformation_scrim_behavior" />
android:visibility="invisible" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/actionButton"
@ -30,7 +30,7 @@
android:layout_margin="16dp"
android:src="@drawable/ic_plus_24dp" />
<com.google.android.material.transformation.TransformationChildCard
<com.google.android.material.card.MaterialCardView
android:id="@+id/sheet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -38,8 +38,7 @@
android:layout_margin="16dp"
android:visibility="invisible"
app:cardBackgroundColor="?attr/colorSurface"
app:cardElevation="2dp"
app:layout_behavior="@string/fab_transformation_sheet_behavior">
app:cardElevation="2dp">
<LinearLayout
android:layout_width="240dp"
@ -76,6 +75,7 @@
android:textColor="?attr/colorOnPrimary"
android:textSize="?attr/status_text_large" />
</LinearLayout>
</com.google.android.material.transformation.TransformationChildCard>
</com.google.android.material.card.MaterialCardView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Loading…
Cancel
Save