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