From ee410650f7c7eecec042880f5a92d13a7f27713d Mon Sep 17 00:00:00 2001
From: 18401019693 <https://gitee.com/xxkp/NEWPDLIVE.git>
Date: Thu, 11 Aug 2022 18:06:01 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=8E=A8=E8=8D=90=E4=BC=98?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../res/layout/view_home_float_banner.xml     | 100 +++++++++++-------
 .../yunbao/main/views/FloatBannerView.java    |  96 +++++++++--------
 2 files changed, 112 insertions(+), 84 deletions(-)

diff --git a/common/src/main/res/layout/view_home_float_banner.xml b/common/src/main/res/layout/view_home_float_banner.xml
index 7002c06fa..018d19021 100644
--- a/common/src/main/res/layout/view_home_float_banner.xml
+++ b/common/src/main/res/layout/view_home_float_banner.xml
@@ -17,53 +17,15 @@
         android:paddingEnd="7dp"
         android:paddingBottom="5dp" />
 
-    <RelativeLayout
-        android:id="@+id/banner_layout2"
-        android:layout_width="25dp"
-        android:layout_height="25dp"
-        android:layout_centerVertical="true"
-        android:layout_marginStart="23dp"
-        android:gravity="center"
-        android:padding="1dp"
-        android:background="@drawable/bg_white_clip"
-        android:visibility="visible">
-
-        <com.yunbao.common.views.weight.ClipPathCircleImage
-            android:id="@+id/clip_image2"
-            android:layout_centerInParent="true"
-            android:layout_width="24dp"
-            android:layout_gravity="center"
-            android:layout_height="24dp" />
-    </RelativeLayout>
-
-    <RelativeLayout
-        android:id="@+id/banner_layout3"
-        android:layout_width="25dp"
-        android:layout_height="25dp"
-        android:gravity="center"
-        android:padding="1dp"
-        android:layout_centerVertical="true"
-        android:layout_marginStart="23dp"
-        android:background="@drawable/bg_white_clip">
-
-        <com.yunbao.common.views.weight.ClipPathCircleImage
-            android:id="@+id/clip_image3"
-            android:layout_width="24dp"
-            android:layout_height="24dp"
-            android:layout_centerInParent="true"
-            android:layout_gravity="center" />
-    </RelativeLayout>
-
-
     <RelativeLayout
         android:id="@+id/banner_layout1"
         android:layout_width="25dp"
         android:layout_height="25dp"
-        android:gravity="center"
         android:layout_centerVertical="true"
-        android:layout_marginStart="10dp"
-        android:padding="1dp"
+        android:layout_marginStart="28dp"
         android:background="@drawable/bg_white_clip"
+        android:gravity="center"
+        android:padding="1dp"
         android:visibility="visible">
 
         <com.yunbao.common.views.weight.ClipPathCircleImage
@@ -74,6 +36,62 @@
             android:layout_gravity="center" />
     </RelativeLayout>
 
+    <RelativeLayout
+        android:id="@+id/banner_layout2"
+        android:layout_width="25dp"
+        android:layout_height="25dp"
+        android:layout_centerVertical="true"
+        android:layout_marginStart="28dp"
+        android:background="@drawable/bg_white_clip"
+        android:gravity="center"
+        android:padding="1dp">
+
+        <com.yunbao.common.views.weight.ClipPathCircleImage
+            android:id="@+id/clip_image2"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            android:layout_centerInParent="true"
+            android:layout_gravity="center" />
+    </RelativeLayout>
+
+
+    <RelativeLayout
+        android:id="@+id/banner_layout3"
+        android:layout_width="30dp"
+        android:layout_height="30dp"
+        android:layout_centerVertical="true"
+        android:layout_marginStart="10dp"
+        android:background="@drawable/bg_white_clip"
+        android:gravity="center"
+        android:padding="1dp"
+        android:visibility="visible">
+
+        <com.yunbao.common.views.weight.ClipPathCircleImage
+            android:id="@+id/clip_image3"
+            android:layout_width="29dp"
+            android:layout_height="29dp"
+            android:layout_centerInParent="true"
+            android:layout_gravity="center" />
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/banner_layout4"
+        android:layout_width="30dp"
+        android:layout_height="30dp"
+        android:layout_centerVertical="true"
+        android:layout_marginStart="10dp"
+        android:background="@drawable/bg_white_clip"
+        android:gravity="center"
+        android:padding="1dp"
+        android:visibility="visible">
+
+        <com.yunbao.common.views.weight.ClipPathCircleImage
+            android:id="@+id/clip_image4"
+            android:layout_width="29dp"
+            android:layout_height="29dp"
+            android:layout_centerInParent="true"
+            android:layout_gravity="center" />
+    </RelativeLayout>
 
     <TextView
         android:id="@+id/title"
diff --git a/main/src/main/java/com/yunbao/main/views/FloatBannerView.java b/main/src/main/java/com/yunbao/main/views/FloatBannerView.java
index 85e1132b3..e7a5b70f0 100644
--- a/main/src/main/java/com/yunbao/main/views/FloatBannerView.java
+++ b/main/src/main/java/com/yunbao/main/views/FloatBannerView.java
@@ -8,11 +8,10 @@ import android.view.View;
 import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.view.animation.AnimationSet;
+import android.view.animation.ScaleAnimation;
 import android.view.animation.TranslateAnimation;
 import android.widget.FrameLayout;
-import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
-import android.widget.ViewFlipper;
 
 import com.yunbao.common.R;
 import com.yunbao.common.bean.AnchorRecommendItemModel;
@@ -27,13 +26,11 @@ import java.util.List;
  */
 public class FloatBannerView extends FrameLayout {
     private View rootView;
-    private LinearLayout rootLayout;
-    private ViewFlipper homeBanner;
-    private RelativeLayout bannerLayout1, bannerLayout2, bannerLayout3;
-    private ClipPathCircleImage clipImage1, clipImage2, clipImage3;
+    private RelativeLayout bannerLayout1, bannerLayout2, bannerLayout3, bannerLayout4;
+    private ClipPathCircleImage clipImage1, clipImage2, clipImage3, clipImage4;
     private List<AnchorRecommendItemModel> list = new ArrayList<>();
     //默认定时器时间
-    private int delayMillis = 1500;
+    private int delayMillis = 1000;
     //Handler定时加载下一张的数据
     private Handler bannerHandler = new Handler();
     private int index = 0;
@@ -46,13 +43,14 @@ public class FloatBannerView extends FrameLayout {
     public FloatBannerView(Context context, AttributeSet attrs) {
         super(context, attrs);
         rootView = View.inflate(context, R.layout.view_home_float_banner, this);
-        //banner_layout3
+        clipImage4 = rootView.findViewById(R.id.clip_image4);
         clipImage3 = rootView.findViewById(R.id.clip_image3);
         clipImage2 = rootView.findViewById(R.id.clip_image2);
         clipImage1 = rootView.findViewById(R.id.clip_image1);
         bannerLayout1 = rootView.findViewById(R.id.banner_layout1);
         bannerLayout2 = rootView.findViewById(R.id.banner_layout2);
         bannerLayout3 = rootView.findViewById(R.id.banner_layout3);
+        bannerLayout4 = rootView.findViewById(R.id.banner_layout4);
 
     }
 
@@ -70,10 +68,21 @@ public class FloatBannerView extends FrameLayout {
      * 设置轮播数据
      */
     public void showBanner(List<AnchorRecommendItemModel> mList) {
-        list.clear();
-        list.addAll(mList);
         release();
-        bannerHandler.post(mFlipRunnable);
+        post(() -> {
+            if (mList.size() < 3) {
+                setVisibility(GONE);
+                return;
+            }
+            list.clear();
+            list.addAll(mList);
+            ImgLoader.displayAvatar(getContext(), list.get(0).getAvatar(), clipImage3);
+            ImgLoader.displayAvatar(getContext(), list.get(1).getAvatar(), clipImage2);
+            ImgLoader.displayAvatar(getContext(), list.get(2).getAvatar(), clipImage1);
+
+            bannerHandler.post(mFlipRunnable);
+        });
+
 
     }
 
@@ -82,50 +91,45 @@ public class FloatBannerView extends FrameLayout {
      */
     public void release() {
         bannerHandler.removeCallbacks(mFlipRunnable);
+        bannerLayout4.clearAnimation();
+        bannerLayout2.clearAnimation();
     }
 
     private final Runnable mFlipRunnable = new Runnable() {
         @Override
         public void run() {
-            if (index == list.size()) {
+            int next = index + 1;
+            next = (next >= list.size() ? 0 : next);
+            if (next == 0) {
                 index = 0;
             }
-            int next = index + 1;
-            next = (next == list.size() ? 0 : next);
-            Uid = String.valueOf(list.get(next).getUid());
+
+            float targetX = bannerLayout2.getX() - bannerLayout3.getX();
+            float targetY = bannerLayout2.getY() - bannerLayout3.getY();
+            bannerLayout3.setVisibility(GONE);
             ImgLoader.displayAvatar(getContext(), list.get(next).getAvatar(), clipImage3);
             ImgLoader.displayAvatar(getContext(), list.get(next).getAvatar(), clipImage2);
-            ImgLoader.displayAvatar(getContext(), list.get(index).getAvatar(), clipImage1);
-            TranslateAnimation animationTranslate = new TranslateAnimation(0, -20f, 0, 0.2f);
-            TranslateAnimation animationTranslate3 = new TranslateAnimation(0, -20f, 0, 0.2f);
+            TranslateAnimation animationTranslate = new TranslateAnimation(0, -targetX / 1.2f, 0, -targetY / 1.2f);
+            ScaleAnimation scaleAnimation = new ScaleAnimation(1f, 1.2f, 1f, 1.2f);
             AnimationSet animationSet1 = new AnimationSet(true);
             animationSet1.setFillAfter(true);
-            animationSet1.setDuration(230);
+            animationSet1.setDuration(500);
             animationSet1.addAnimation(animationTranslate);
-            AlphaAnimation animationAlpha = new AlphaAnimation(1, 0);
-            AnimationSet animationSet2 = new AnimationSet(true);
-            animationSet2.setFillAfter(true);
-            animationSet2.setDuration(210);
-            animationSet2.addAnimation(animationAlpha);
-            animationSet2.addAnimation(animationTranslate3);
-
-            int finalNext = next;
+            animationSet1.addAnimation(scaleAnimation);
+            final int finalNext = next;
             animationSet1.setAnimationListener(new Animation.AnimationListener() {
                 @Override
                 public void onAnimationStart(Animation animation) {
-                    int page3 = finalNext + 1;
-                    page3 = (page3 == list.size() ? 0 : page3);
-                    ImgLoader.displayAvatar(getContext(), list.get(page3).getAvatar(), clipImage2);
+                    int show = finalNext + 1;
+
+                    ImgLoader.displayAvatar(getContext(), list.get(show >= list.size() ? 0 : show).getAvatar(), clipImage1);
                 }
 
                 @Override
                 public void onAnimationEnd(Animation animation) {
-                    bannerLayout3.clearAnimation();
-                    ImgLoader.displayAvatar(getContext(), list.get(finalNext).getAvatar(), clipImage1);
-                    int page3 = finalNext + 1;
-                    page3 = (page3 == list.size() ? 0 : page3);
-                    ImgLoader.displayAvatar(getContext(), list.get(page3).getAvatar(), clipImage3);
-                    bannerLayout1.clearAnimation();
+
+                    bannerLayout3.setVisibility(VISIBLE);
+
                 }
 
                 @Override
@@ -133,7 +137,13 @@ public class FloatBannerView extends FrameLayout {
 
                 }
             });
-
+            TranslateAnimation animationTranslate2 = new TranslateAnimation(0, -targetX / 1.2f, 0, -targetY / 1.2f);
+            AlphaAnimation animationAlpha = new AlphaAnimation(1, 0);
+            AnimationSet animationSet2 = new AnimationSet(true);
+            animationSet2.setFillAfter(true);
+            animationSet2.setDuration(700);
+            animationSet2.addAnimation(animationTranslate2);
+            animationSet2.addAnimation(animationAlpha);
             animationSet2.setAnimationListener(new Animation.AnimationListener() {
                 @Override
                 public void onAnimationStart(Animation animation) {
@@ -142,8 +152,10 @@ public class FloatBannerView extends FrameLayout {
 
                 @Override
                 public void onAnimationEnd(Animation animation) {
-
-
+                    ImgLoader.displayAvatar(getContext(), list.get(finalNext).getAvatar(), clipImage4);
+                    index = index + 1;
+                    bannerHandler.postDelayed(mFlipRunnable, delayMillis);
+                    bannerLayout3.clearAnimation();
                 }
 
                 @Override
@@ -151,10 +163,8 @@ public class FloatBannerView extends FrameLayout {
 
                 }
             });
-            bannerLayout1.startAnimation(animationSet2);
-            bannerLayout3.startAnimation(animationSet1);
-            index = index + 1;
-            bannerHandler.postDelayed(mFlipRunnable, delayMillis);
+            bannerLayout4.startAnimation(animationSet2);
+            bannerLayout2.startAnimation(animationSet1);
         }
     };