add more animation

This commit is contained in:
ShirosakiMio 2024-09-20 17:09:50 +08:00
parent 4daa984abb
commit 10e761f2e7
5 changed files with 197 additions and 94 deletions

View File

@ -18,6 +18,19 @@ class AnimUtil {
} }
} }
@JvmStatic
fun playTranslationY(
views: List<View>,
duration: Long,
vararg values: Float
): List<ObjectAnimator> {
return mutableListOf<ObjectAnimator>().apply {
for (view in views) {
add(playTranslationY(view, duration, *values))
}
}
}
@JvmStatic @JvmStatic
fun playTranslationX( fun playTranslationX(
view: View, view: View,
@ -29,6 +42,19 @@ class AnimUtil {
} }
} }
@JvmStatic
fun playTranslationX(
views: List<View>,
duration: Long,
vararg values: Float
): List<ObjectAnimator> {
return mutableListOf<ObjectAnimator>().apply {
for (view in views) {
add(playTranslationX(view, duration, *values))
}
}
}
@JvmStatic @JvmStatic
fun playTranslationZ( fun playTranslationZ(
view: View, view: View,
@ -40,6 +66,19 @@ class AnimUtil {
} }
} }
@JvmStatic
fun playTranslationZ(
views: List<View>,
duration: Long,
vararg values: Float
): List<ObjectAnimator> {
return mutableListOf<ObjectAnimator>().apply {
for (view in views) {
add(playTranslationZ(view, duration, *values))
}
}
}
@JvmStatic @JvmStatic
fun playRotation( fun playRotation(
view: View, view: View,
@ -62,6 +101,19 @@ class AnimUtil {
} }
} }
@JvmStatic
fun playScaleX(
views: List<View>,
duration: Long,
vararg values: Float
): List<ObjectAnimator> {
return mutableListOf<ObjectAnimator>().apply {
for (view in views) {
add(playScaleX(view, duration, *values))
}
}
}
@JvmStatic @JvmStatic
fun playScaleY( fun playScaleY(
view: View, view: View,
@ -73,6 +125,19 @@ class AnimUtil {
} }
} }
@JvmStatic
fun playScaleY(
views: List<View>,
duration: Long,
vararg values: Float
): List<ObjectAnimator> {
return mutableListOf<ObjectAnimator>().apply {
for (view in views) {
add(playScaleY(view, duration, *values))
}
}
}
@JvmStatic @JvmStatic
fun playAlpha( fun playAlpha(
view: View, view: View,

View File

@ -16,6 +16,7 @@ import androidx.core.view.forEach
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import com.mio.util.AnimUtil import com.mio.util.AnimUtil
import com.mio.util.AnimUtil.Companion.interpolator import com.mio.util.AnimUtil.Companion.interpolator
import com.mio.util.AnimUtil.Companion.startAfter
import com.tungsten.fcl.R import com.tungsten.fcl.R
import com.tungsten.fcl.databinding.ActivityMainBinding import com.tungsten.fcl.databinding.ActivityMainBinding
import com.tungsten.fcl.game.JarExecutorHelper import com.tungsten.fcl.game.JarExecutorHelper
@ -299,7 +300,7 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener {
} }
fun refreshMenuView(view: FCLMenuView?) { fun refreshMenuView(view: FCLMenuView?) {
bind.menu.forEach { bind.leftMenu.forEach {
if (it is FCLMenuView && it != view) { if (it is FCLMenuView && it != view) {
it.isSelected = false it.isSelected = false
} }
@ -407,7 +408,9 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener {
.orElse(getString(R.string.message_unknown)) .orElse(getString(R.string.message_unknown))
val libraries = StringBuilder(game) val libraries = StringBuilder(game)
val analyzer = LibraryAnalyzer.analyze( val analyzer = LibraryAnalyzer.analyze(
Profiles.getSelectedProfile().repository.getResolvedPreservingPatchesVersion(version) Profiles.getSelectedProfile().repository.getResolvedPreservingPatchesVersion(
version
)
) )
for (mark in analyzer) { for (mark in analyzer) {
val libraryId = mark.libraryId val libraryId = mark.libraryId
@ -468,18 +471,35 @@ class MainActivity : FCLActivity(), OnSelectListener, View.OnClickListener {
private fun playAnim() { private fun playAnim() {
bind.apply { bind.apply {
val speed = ThemeEngine.getInstance().getTheme().animationSpeed
AnimUtil.playTranslationX( AnimUtil.playTranslationX(
leftMenu, listOf(leftMenu, splitLeft),
ThemeEngine.getInstance().getTheme().animationSpeed * 100L, speed * 100L,
-100f, -100f,
0f 0f
).interpolator(BounceInterpolator()).start() ).forEach {
it.interpolator(BounceInterpolator()).start()
}
AnimUtil.playTranslationX( AnimUtil.playTranslationX(
rightMenu, listOf(rightMenu, splitRight),
ThemeEngine.getInstance().getTheme().animationSpeed * 100L, speed * 100L,
100f, 100f,
0f 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)
}
} }
} }
} }

View File

@ -7,8 +7,10 @@ import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.AppCompatImageView;
import com.mio.util.AnimUtil;
import com.tungsten.fcl.R; import com.tungsten.fcl.R;
import com.tungsten.fcllibrary.component.FCLAdapter; 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.FCLImageButton;
import com.tungsten.fcllibrary.component.view.FCLRadioButton; import com.tungsten.fcllibrary.component.view.FCLRadioButton;
import com.tungsten.fcllibrary.component.view.FCLTextView; import com.tungsten.fcllibrary.component.view.FCLTextView;
@ -71,6 +73,7 @@ public class VersionListAdapter extends FCLAdapter {
viewHolder.subtitle.setText(versionListItem.getLibraries()); viewHolder.subtitle.setText(versionListItem.getLibraries());
viewHolder.radioButton.setOnClickListener(view1 -> versionListItem.getProfile().setSelectedVersion(versionListItem.getVersion())); viewHolder.radioButton.setOnClickListener(view1 -> versionListItem.getProfile().setSelectedVersion(versionListItem.getVersion()));
viewHolder.delete.setOnClickListener(view1 -> Versions.deleteVersion(getContext(), versionListItem.getProfile(), 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; return view;
} }
} }

View File

@ -8,27 +8,24 @@
android:id="@+id/background" android:id="@+id/background"
tools:context=".activity.MainActivity"> tools:context=".activity.MainActivity">
<ScrollView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/left_menu" android:id="@+id/left_menu"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/menu"
android:paddingStart="5dp" android:paddingStart="5dp"
android:paddingEnd="5dp" android:paddingEnd="5dp"
android:paddingTop="10dp" android:paddingTop="10dp"
android:paddingBottom="10dp" android:paddingBottom="10dp"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipChildren="false" android:clipChildren="false"
android:clipToPadding="false"> android:clipToPadding="false"
app:layout_constraintStart_toStartOf="parent">
<com.tungsten.fcllibrary.component.view.FCLMenuView <com.tungsten.fcllibrary.component.view.FCLMenuView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/manage"
android:src="@drawable/ic_baseline_home_24" android:src="@drawable/ic_baseline_home_24"
android:id="@+id/home"/> android:id="@+id/home"/>
@ -36,6 +33,9 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/home"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/download"
android:src="@drawable/ic_baseline_build_24" android:src="@drawable/ic_baseline_build_24"
android:id="@+id/manage"/> android:id="@+id/manage"/>
@ -43,6 +43,9 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/manage"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/controller"
android:src="@drawable/ic_baseline_cloud_download_24" android:src="@drawable/ic_baseline_cloud_download_24"
android:id="@+id/download"/> android:id="@+id/download"/>
@ -50,6 +53,9 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/download"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/multiplayer"
android:src="@drawable/ic_baseline_videogame_asset_24" android:src="@drawable/ic_baseline_videogame_asset_24"
android:id="@+id/controller"/> android:id="@+id/controller"/>
@ -58,6 +64,9 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/controller"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/setting"
android:src="@drawable/ic_baseline_wifi_24" android:src="@drawable/ic_baseline_wifi_24"
android:id="@+id/multiplayer"/> android:id="@+id/multiplayer"/>
@ -65,6 +74,9 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/multiplayer"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/back"
android:src="@drawable/ic_baseline_settings_24" android:src="@drawable/ic_baseline_settings_24"
android:id="@+id/setting"/> android:id="@+id/setting"/>
@ -72,12 +84,13 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/setting"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:src="@drawable/ic_baseline_arrow_back_24" android:src="@drawable/ic_baseline_arrow_back_24"
android:id="@+id/back"/> android:id="@+id/back"/>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<View <View
android:background="@android:color/darker_gray" android:background="@android:color/darker_gray"
@ -98,8 +111,6 @@
android:id="@+id/right_menu" android:id="@+id/right_menu"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1" app:layout_constraintHorizontal_bias="1"
app:layout_constraintWidth_percent="0.25"> app:layout_constraintWidth_percent="0.25">

View File

@ -1,46 +1,49 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:paddingBottom="10dp"> android:paddingBottom="10dp">
<com.tungsten.fcllibrary.component.view.FCLConstraintLayout <com.tungsten.fcllibrary.component.view.FCLConstraintLayout
android:background="@drawable/bg_container_white"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" android:background="@drawable/bg_container_white"
android:clickable="true"
android:focusable="true"
android:padding="5dp"
android:stateListAnimator="@xml/anim_scale"
app:auto_constraint_background_tint="true" app:auto_constraint_background_tint="true"
android:padding="5dp"> app:layout_constraintTop_toTopOf="parent">
<com.tungsten.fcllibrary.component.view.FCLRadioButton <com.tungsten.fcllibrary.component.view.FCLRadioButton
android:id="@+id/radio" android:id="@+id/radio"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5" /> app:layout_constraintVertical_bias="0.5" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon" android:id="@+id/icon"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/radio" app:layout_constraintStart_toEndOf="@+id/radio"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5" /> app:layout_constraintVertical_bias="0.5" />
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
app:layout_constraintStart_toEndOf="@+id/icon" android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@+id/delete"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/delete"
app:layout_constraintStart_toEndOf="@+id/icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5"> app:layout_constraintVertical_bias="0.5">
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
@ -49,36 +52,36 @@
android:orientation="horizontal"> android:orientation="horizontal">
<com.tungsten.fcllibrary.component.view.FCLTextView <com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true"
android:layout_gravity="center" android:layout_gravity="center"
android:id="@+id/title"/> android:singleLine="true"
app:auto_text_tint="true" />
<com.tungsten.fcllibrary.component.view.FCLTextView <com.tungsten.fcllibrary.component.view.FCLTextView
android:paddingStart="4dp" android:id="@+id/tag"
android:paddingEnd="4dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:layout_marginStart="10dp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="11sp"
android:id="@+id/tag"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="10dp"
android:paddingStart="4dp"
android:paddingTop="2dp"
android:paddingEnd="4dp"
android:paddingBottom="2dp"
android:singleLine="true" android:singleLine="true"
android:textSize="11sp"
app:auto_text_tint="true" /> app:auto_text_tint="true" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<com.tungsten.fcllibrary.component.view.FCLTextView <com.tungsten.fcllibrary.component.view.FCLTextView
app:auto_text_tint="true" android:id="@+id/subtitle"
android:textSize="11sp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:singleLine="true"
android:id="@+id/subtitle"/> android:textSize="11sp"
app:auto_text_tint="true" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
@ -87,10 +90,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_delete_24" android:src="@drawable/ic_baseline_delete_24"
android:stateListAnimator="@xml/anim_scale_large"
app:auto_tint="true" app:auto_tint="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.5" /> app:layout_constraintVertical_bias="0.5" />
</com.tungsten.fcllibrary.component.view.FCLConstraintLayout> </com.tungsten.fcllibrary.component.view.FCLConstraintLayout>