Browse Source

优化引导页

zk 1 year ago
parent
commit
867901da6b

+ 26 - 11
app/src/main/java/com/atmob/voiceai/module/splash/SplashActivity.java

@@ -2,11 +2,13 @@ package com.atmob.voiceai.module.splash;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.os.Handler;
 import android.view.View;
+import android.view.animation.AnimationSet;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -47,23 +49,20 @@ public class SplashActivity extends BaseActivity<ActivitySplashBinding> {
     }
 
     private void initObserver() {
+        splashViewModel.setCanNext(true);
         splashViewModel.getShowMainEvent().observe(this, o -> showMain());
         splashViewModel.getCurrentGuide().observe(this, current -> {
             if (current == null) {
                 return;
             }
             if (SplashViewModel.GUIDE_PAGE_1 == current) {
-                startGuideEnter(binding.ivGuideHeader1, binding.tvGuideHeader1, binding.ivGuide1, 400);
+                startGuideEnter(binding.ivGuideHeader1, binding.tvGuideHeader1, binding.ivGuide1, 0, 400);
             } else if (SplashViewModel.GUIDE_PAGE_2 == current) {
                 startGuideLeave(binding.ivGuideHeader1, binding.tvGuideHeader1, binding.ivGuide1);
-                new Handler().postDelayed(() -> {
-                    startGuideEnter(binding.ivGuideHeader2, binding.tvGuideHeader2, binding.ivGuide2, 0);
-                }, 600);
+                startGuideEnter(binding.ivGuideHeader2, binding.tvGuideHeader2, binding.ivGuide2, 600, 0);
             } else if (SplashViewModel.GUIDE_PAGE_3 == current) {
                 startGuideLeave(binding.ivGuideHeader2, binding.tvGuideHeader2, binding.ivGuide2);
-                new Handler().postDelayed(() -> {
-                    binding.tvNextStep.animate().alpha(0).setDuration(200).start();
-                }, 400);
+                new Handler().postDelayed(() -> binding.tvNextStep.animate().alpha(0).setDuration(200).start(), 400);
                 showEndGuide();
             } else if (SplashViewModel.GUIDE_PAGE_END == current) {
                 closeGuide();
@@ -106,24 +105,40 @@ public class SplashActivity extends BaseActivity<ActivitySplashBinding> {
     }
 
 
-    private void startGuideEnter(@NonNull View headerView1, @NonNull View headerView2, @NonNull View contentView, int contentDelay) {
+    private void startGuideEnter(@NonNull View headerView1, @NonNull View headerView2, @NonNull View contentView, int startDelay, int contentStartDelay) {
         ValueAnimator alphaAnimator = ValueAnimator.ofFloat(0f, 1f);
         alphaAnimator.setDuration(800);
+        alphaAnimator.setStartDelay(startDelay);
         alphaAnimator.addUpdateListener(animation -> {
             float alpha = (float) animation.getAnimatedValue();
             headerView1.setAlpha(alpha);
             headerView2.setAlpha(alpha);
         });
-        alphaAnimator.start();
 
         ValueAnimator contentAnimator = ValueAnimator.ofFloat(SizeUtil.getScreenWidth(), 0f);
-        contentAnimator.setStartDelay(contentDelay);
+        contentAnimator.setStartDelay(startDelay + contentStartDelay);
         contentAnimator.setDuration(800);
         contentAnimator.addUpdateListener(animation -> {
             float value = (float) animation.getAnimatedValue();
             contentView.setX(value);
         });
-        contentAnimator.start();
+        AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.playTogether(alphaAnimator, contentAnimator);
+        animatorSet.addListener(new AnimatorListenerAdapter() {
+
+            @Override
+            public void onAnimationStart(Animator animation) {
+                super.onAnimationStart(animation);
+                splashViewModel.setCanNext(false);
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                super.onAnimationEnd(animation);
+                splashViewModel.setCanNext(true);
+            }
+        });
+        animatorSet.start();
     }
 
 

+ 9 - 0
app/src/main/java/com/atmob/voiceai/module/splash/SplashViewModel.java

@@ -24,6 +24,8 @@ public class SplashViewModel extends BaseViewModel {
     private final SingleLiveEvent<?> showMainEvent = new SingleLiveEvent<>();
     private final MutableLiveData<Integer> currentGuide = new MutableLiveData<>();
 
+    private boolean canNext = false;
+
     @Inject
     public SplashViewModel() {
         boolean isFirst = KVUtils.getDefault().getBoolean(IS_FIRST_OPEN, true);
@@ -48,11 +50,18 @@ public class SplashViewModel extends BaseViewModel {
     }
 
 
+    public void setCanNext(boolean canNext) {
+        this.canNext = canNext;
+    }
+
     private void firstStartMain() {
         KVUtils.getDefault().putBoolean(IS_FIRST_OPEN, false);
     }
 
     public void onContinueClick(int index) {
+        if (!canNext) {
+            return;
+        }
         if (index == GUIDE_PAGE_1) {
             currentGuide.setValue(GUIDE_PAGE_2);
         } else if (index == GUIDE_PAGE_2) {