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
fun playTranslationX(
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
fun playTranslationZ(
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
fun playRotation(
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
fun playScaleY(
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
fun playAlpha(
view: View,

View File

@ -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)
}
}
}
}

View File

@ -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;
}
}

View File

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

View File

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