From 10e761f2e771d216a08626eaa2702e09bb2bcc6b Mon Sep 17 00:00:00 2001 From: ShirosakiMio <852468399@qq.com> Date: Fri, 20 Sep 2024 17:09:50 +0800 Subject: [PATCH] add more animation --- FCL/src/main/java/com/mio/util/AnimUtil.kt | 65 +++++++++ .../com/tungsten/fcl/activity/MainActivity.kt | 36 +++-- .../fcl/ui/version/VersionListAdapter.java | 3 + FCL/src/main/res/layout/activity_main.xml | 127 ++++++++++-------- FCL/src/main/res/layout/item_version.xml | 60 +++++---- 5 files changed, 197 insertions(+), 94 deletions(-) diff --git a/FCL/src/main/java/com/mio/util/AnimUtil.kt b/FCL/src/main/java/com/mio/util/AnimUtil.kt index e2f67183..ceb18f0e 100644 --- a/FCL/src/main/java/com/mio/util/AnimUtil.kt +++ b/FCL/src/main/java/com/mio/util/AnimUtil.kt @@ -18,6 +18,19 @@ class AnimUtil { } } + @JvmStatic + fun playTranslationY( + views: List, + duration: Long, + vararg values: Float + ): List { + return mutableListOf().apply { + for (view in views) { + add(playTranslationY(view, duration, *values)) + } + } + } + @JvmStatic fun playTranslationX( view: View, @@ -29,6 +42,19 @@ class AnimUtil { } } + @JvmStatic + fun playTranslationX( + views: List, + duration: Long, + vararg values: Float + ): List { + return mutableListOf().apply { + for (view in views) { + add(playTranslationX(view, duration, *values)) + } + } + } + @JvmStatic fun playTranslationZ( view: View, @@ -40,6 +66,19 @@ class AnimUtil { } } + @JvmStatic + fun playTranslationZ( + views: List, + duration: Long, + vararg values: Float + ): List { + return mutableListOf().apply { + for (view in views) { + add(playTranslationZ(view, duration, *values)) + } + } + } + @JvmStatic fun playRotation( view: View, @@ -62,6 +101,19 @@ class AnimUtil { } } + @JvmStatic + fun playScaleX( + views: List, + duration: Long, + vararg values: Float + ): List { + return mutableListOf().apply { + for (view in views) { + add(playScaleX(view, duration, *values)) + } + } + } + @JvmStatic fun playScaleY( view: View, @@ -73,6 +125,19 @@ class AnimUtil { } } + @JvmStatic + fun playScaleY( + views: List, + duration: Long, + vararg values: Float + ): List { + return mutableListOf().apply { + for (view in views) { + add(playScaleY(view, duration, *values)) + } + } + } + @JvmStatic fun playAlpha( view: View, diff --git a/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt b/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt index d1f45298..45e6da7e 100644 --- a/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt +++ b/FCL/src/main/java/com/tungsten/fcl/activity/MainActivity.kt @@ -16,6 +16,7 @@ import androidx.core.view.forEach import androidx.databinding.DataBindingUtil import com.mio.util.AnimUtil import com.mio.util.AnimUtil.Companion.interpolator +import com.mio.util.AnimUtil.Companion.startAfter import com.tungsten.fcl.R import com.tungsten.fcl.databinding.ActivityMainBinding import com.tungsten.fcl.game.JarExecutorHelper @@ -299,7 +300,7 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener { } fun refreshMenuView(view: FCLMenuView?) { - bind.menu.forEach { + bind.leftMenu.forEach { if (it is FCLMenuView && it != view) { it.isSelected = false } @@ -407,7 +408,9 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener { .orElse(getString(R.string.message_unknown)) val libraries = StringBuilder(game) val analyzer = LibraryAnalyzer.analyze( - Profiles.getSelectedProfile().repository.getResolvedPreservingPatchesVersion(version) + Profiles.getSelectedProfile().repository.getResolvedPreservingPatchesVersion( + version + ) ) for (mark in analyzer) { val libraryId = mark.libraryId @@ -468,18 +471,35 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener { private fun playAnim() { bind.apply { + val speed = ThemeEngine.getInstance().getTheme().animationSpeed AnimUtil.playTranslationX( - leftMenu, - ThemeEngine.getInstance().getTheme().animationSpeed * 100L, + listOf(leftMenu, splitLeft), + speed * 100L, -100f, 0f - ).interpolator(BounceInterpolator()).start() + ).forEach { + it.interpolator(BounceInterpolator()).start() + } AnimUtil.playTranslationX( - rightMenu, - ThemeEngine.getInstance().getTheme().animationSpeed * 100L, + listOf(rightMenu, splitRight), + speed * 100L, 100f, 0f - ).interpolator(BounceInterpolator()).start() + ).forEach { + it.interpolator(BounceInterpolator()).start() + } + AnimUtil.playTranslationY(listOf(launch, executeJar), speed * 100L, -200f, 0f) + .forEachIndexed { index, objectAnimator -> + objectAnimator.interpolator(BounceInterpolator()).startAfter((index + 1) * 100L) + } + AnimUtil.playTranslationY( + listOf(home, manage, download, controller, setting, back), + speed * 100L, + -300f, + 0f + ).forEachIndexed { index, objectAnimator -> + objectAnimator.interpolator(BounceInterpolator()).startAfter((index + 1) * 100L) + } } } } \ No newline at end of file diff --git a/FCL/src/main/java/com/tungsten/fcl/ui/version/VersionListAdapter.java b/FCL/src/main/java/com/tungsten/fcl/ui/version/VersionListAdapter.java index 8b8cdb00..ef020d87 100644 --- a/FCL/src/main/java/com/tungsten/fcl/ui/version/VersionListAdapter.java +++ b/FCL/src/main/java/com/tungsten/fcl/ui/version/VersionListAdapter.java @@ -7,8 +7,10 @@ import android.view.ViewGroup; import androidx.appcompat.widget.AppCompatImageView; +import com.mio.util.AnimUtil; import com.tungsten.fcl.R; import com.tungsten.fcllibrary.component.FCLAdapter; +import com.tungsten.fcllibrary.component.theme.ThemeEngine; import com.tungsten.fcllibrary.component.view.FCLImageButton; import com.tungsten.fcllibrary.component.view.FCLRadioButton; import com.tungsten.fcllibrary.component.view.FCLTextView; @@ -71,6 +73,7 @@ public class VersionListAdapter extends FCLAdapter { viewHolder.subtitle.setText(versionListItem.getLibraries()); viewHolder.radioButton.setOnClickListener(view1 -> versionListItem.getProfile().setSelectedVersion(versionListItem.getVersion())); viewHolder.delete.setOnClickListener(view1 -> Versions.deleteVersion(getContext(), versionListItem.getProfile(), versionListItem.getVersion())); + AnimUtil.playTranslationX(view, ThemeEngine.getInstance().getTheme().getAnimationSpeed() * 30L, -100f, 0f).start(); return view; } } diff --git a/FCL/src/main/res/layout/activity_main.xml b/FCL/src/main/res/layout/activity_main.xml index d2656979..6b0bb94c 100644 --- a/FCL/src/main/res/layout/activity_main.xml +++ b/FCL/src/main/res/layout/activity_main.xml @@ -8,76 +8,89 @@ android:id="@+id/background" tools:context=".activity.MainActivity"> - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintBottom_toTopOf="@id/manage" + android:src="@drawable/ic_baseline_home_24" + android:id="@+id/home"/> - + - + - + - + - + - + - - - - - + diff --git a/FCL/src/main/res/layout/item_version.xml b/FCL/src/main/res/layout/item_version.xml index 75c6bff5..b883588f 100644 --- a/FCL/src/main/res/layout/item_version.xml +++ b/FCL/src/main/res/layout/item_version.xml @@ -1,46 +1,49 @@ + app:layout_constraintTop_toTopOf="parent"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.5" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.5" /> + android:singleLine="true" + app:auto_text_tint="true" /> + android:textSize="11sp" + app:auto_text_tint="true" /> + android:textSize="11sp" + app:auto_text_tint="true" /> @@ -87,11 +90,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_baseline_delete_24" + android:stateListAnimator="@xml/anim_scale_large" app:auto_tint="true" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintVertical_bias="0.5"/> + app:layout_constraintVertical_bias="0.5" />