Pq 3 лет назад
Родитель
Сommit
3c6f31ffdf

+ 182 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/HomeMenuBean.java

@@ -10,6 +10,188 @@ import java.util.List;
  */
 public class HomeMenuBean {
     public List<ItemBean> appMenu;
+    public List<BannerBean> banner;
+
+    public static class BannerBean implements Parcelable{
+        /**
+         * updateName : 刘俊驰
+         * subTypeName :
+         * typeName :
+         * status : 1
+         * subType : 0
+         * order : 3
+         * attribute1 : 0
+         * coverImage : https://ks3-cn-beijing.ksyuncs.com/daya/16600084801271652770725150lQLPDhtmx59XSgXNAQjNArawzGMhg5rwutcCeRFM8MADAA_694_264.png
+         * attribute2 : IMAGE
+         * linkUrl : www.baidu.com
+         * clientType : TEACHER
+         * onlineTime : 2022-08-02 00:00:00
+         * offlineTime : 2022-08-10 00:00:00
+         * showTime : 0
+         * memo :
+         * title : 测试老师端轮播
+         * createBy : 56
+         * updateBy : 56
+         * hrefTarget :
+         * videoCoverImage :
+         * subjectIdList :
+         * subjectName :
+         * linkType :
+         * updateTime : 2022-08-09 09:28:14
+         * delFlag : false
+         * createTime : 2022-08-09 09:28:02
+         * id : 135
+         * type : 4
+         * content :
+         */
+
+        public String updateName;
+        public String subTypeName;
+        public String typeName;
+        public int status;
+        public int subType;
+        public int order;
+        public String attribute1;
+        public String coverImage;
+        public String attribute2;
+        public String linkUrl;
+        public String clientType;
+        public String onlineTime;
+        public String offlineTime;
+        public int showTime;
+        public String memo;
+        public String title;
+        public int createBy;
+        public int updateBy;
+        public String hrefTarget;
+        public String videoCoverImage;
+        public String subjectIdList;
+        public String subjectName;
+        public String linkType;
+        public String updateTime;
+        public boolean delFlag;
+        public String createTime;
+        public int id;
+        public int type;
+        public String content;
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeString(this.updateName);
+            dest.writeString(this.subTypeName);
+            dest.writeString(this.typeName);
+            dest.writeInt(this.status);
+            dest.writeInt(this.subType);
+            dest.writeInt(this.order);
+            dest.writeString(this.attribute1);
+            dest.writeString(this.coverImage);
+            dest.writeString(this.attribute2);
+            dest.writeString(this.linkUrl);
+            dest.writeString(this.clientType);
+            dest.writeString(this.onlineTime);
+            dest.writeString(this.offlineTime);
+            dest.writeInt(this.showTime);
+            dest.writeString(this.memo);
+            dest.writeString(this.title);
+            dest.writeInt(this.createBy);
+            dest.writeInt(this.updateBy);
+            dest.writeString(this.hrefTarget);
+            dest.writeString(this.videoCoverImage);
+            dest.writeString(this.subjectIdList);
+            dest.writeString(this.subjectName);
+            dest.writeString(this.linkType);
+            dest.writeString(this.updateTime);
+            dest.writeByte(this.delFlag ? (byte) 1 : (byte) 0);
+            dest.writeString(this.createTime);
+            dest.writeInt(this.id);
+            dest.writeInt(this.type);
+            dest.writeString(this.content);
+        }
+
+        public void readFromParcel(Parcel source) {
+            this.updateName = source.readString();
+            this.subTypeName = source.readString();
+            this.typeName = source.readString();
+            this.status = source.readInt();
+            this.subType = source.readInt();
+            this.order = source.readInt();
+            this.attribute1 = source.readString();
+            this.coverImage = source.readString();
+            this.attribute2 = source.readString();
+            this.linkUrl = source.readString();
+            this.clientType = source.readString();
+            this.onlineTime = source.readString();
+            this.offlineTime = source.readString();
+            this.showTime = source.readInt();
+            this.memo = source.readString();
+            this.title = source.readString();
+            this.createBy = source.readInt();
+            this.updateBy = source.readInt();
+            this.hrefTarget = source.readString();
+            this.videoCoverImage = source.readString();
+            this.subjectIdList = source.readString();
+            this.subjectName = source.readString();
+            this.linkType = source.readString();
+            this.updateTime = source.readString();
+            this.delFlag = source.readByte() != 0;
+            this.createTime = source.readString();
+            this.id = source.readInt();
+            this.type = source.readInt();
+            this.content = source.readString();
+        }
+
+        public BannerBean() {
+        }
+
+        protected BannerBean(Parcel in) {
+            this.updateName = in.readString();
+            this.subTypeName = in.readString();
+            this.typeName = in.readString();
+            this.status = in.readInt();
+            this.subType = in.readInt();
+            this.order = in.readInt();
+            this.attribute1 = in.readString();
+            this.coverImage = in.readString();
+            this.attribute2 = in.readString();
+            this.linkUrl = in.readString();
+            this.clientType = in.readString();
+            this.onlineTime = in.readString();
+            this.offlineTime = in.readString();
+            this.showTime = in.readInt();
+            this.memo = in.readString();
+            this.title = in.readString();
+            this.createBy = in.readInt();
+            this.updateBy = in.readInt();
+            this.hrefTarget = in.readString();
+            this.videoCoverImage = in.readString();
+            this.subjectIdList = in.readString();
+            this.subjectName = in.readString();
+            this.linkType = in.readString();
+            this.updateTime = in.readString();
+            this.delFlag = in.readByte() != 0;
+            this.createTime = in.readString();
+            this.id = in.readInt();
+            this.type = in.readInt();
+            this.content = in.readString();
+        }
+
+        public static final Creator<BannerBean> CREATOR = new Creator<BannerBean>() {
+            @Override
+            public BannerBean createFromParcel(Parcel source) {
+                return new BannerBean(source);
+            }
+
+            @Override
+            public BannerBean[] newArray(int size) {
+                return new BannerBean[size];
+            }
+        };
+    }
 
     public static class ItemBean implements Parcelable {
 

+ 52 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/main/NewHomeFragment.java

@@ -4,6 +4,7 @@ import android.text.TextUtils;
 import android.view.View;
 
 import com.alibaba.android.arouter.launcher.ARouter;
+import com.bumptech.glide.Glide;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.cooleshow.base.common.WebConstants;
@@ -35,6 +36,9 @@ import com.cooleshow.teacher.databinding.FragmentNewHomeLayoutBinding;
 import com.cooleshow.teacher.presenter.main.HomePresenter;
 import com.cooleshow.teacher.widgets.HomeHotMusicSheetItemDecoration;
 import com.cooleshow.usercenter.helper.UserHelper;
+import com.youth.banner.adapter.BannerImageAdapter;
+import com.youth.banner.holder.BannerImageHolder;
+import com.youth.banner.listener.OnBannerListener;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -58,6 +62,8 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
     private HomeMenuPageAdapter menuAdapter;
     private HomeHotAlbumAdapter mAlbumAdapter;
     private HomeHotMusicSheetAdapter mHomeHotMusicSheetAdapter;
+    private ArrayList<HomeMenuBean.BannerBean> mBannerList = new ArrayList<>();
+    private BannerImageAdapter mBannerImageAdapter;
 
     @Override
     protected void initView(View rootView) {
@@ -82,6 +88,18 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
         mViewBinding.rvHotTrack.setAdapter(mHomeHotMusicSheetAdapter);
         mViewBinding.rvHotTrack.setNestedScrollingEnabled(false);
         mViewBinding.rvHotAlbum.setNestedScrollingEnabled(false);
+        mBannerImageAdapter = new BannerImageAdapter<HomeMenuBean.BannerBean>(mBannerList) {
+            @Override
+            public void onBindView(BannerImageHolder holder, HomeMenuBean.BannerBean data, int position, int size) {
+                Glide.with(holder.imageView)
+                        .load(data.coverImage)
+                        .thumbnail(Glide.with(holder.itemView).load(com.cooleshow.base.R.drawable.bg_video_placeholder))//加载成功前显示一个loading的加载
+                        //.apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))  //设置图片圆角
+                        .into(holder.imageView);
+            }
+        };
+        //banner自带图片轮播的适配器
+        mViewBinding.banner.setAdapter(mBannerImageAdapter, true);
         initListener();
         presenter.getHotAlbumList();
         presenter.getHotMusicSheetList();
@@ -112,6 +130,25 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
             presenter.queryLiveAndVideo();
             presenter.appHome();
         });
+
+        mViewBinding.banner.addBannerLifecycleObserver(this)//添加生命周期观察者
+                .setIntercept(true) //是否要拦截事件
+                .setBannerRound(12f) //圆角
+                .isAutoLoop(true)
+                .removeIndicator()
+//                .setIndicator(new CircleIndicator(getContext())) //圆形指示器 还支持条形指示器等
+                .setOnBannerListener(new OnBannerListener<HomeMenuBean.BannerBean>() {
+                    @Override
+                    public void OnBannerClick(HomeMenuBean.BannerBean item, int position) {
+                        if (!TextUtils.isEmpty(item.linkUrl)) {
+                            ARouter.getInstance()
+                                    .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                                    .withString(WebConstants.WEB_URL, item.linkUrl)
+                                    .navigation();
+                        }
+                    }
+                });
+
         mAlbumAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
@@ -140,6 +177,20 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
 
     }
 
+
+    private void bindBanner(List<HomeMenuBean.BannerBean> bannerList) {
+        if (null == bannerList || bannerList.size() == 0) {
+            mViewBinding.banner.setVisibility(View.GONE);
+            return;
+        }
+        mViewBinding.banner.setVisibility(View.VISIBLE);
+        mBannerList.clear();
+        mBannerList.addAll(bannerList);
+        if (mBannerImageAdapter != null) {
+            mBannerImageAdapter.notifyDataSetChanged();
+        }
+    }
+
     @Override
     public void helpCenterContentListSuccess(HelpCenterContentBean data) {
         if (data != null && data.rows != null && data.rows.size() > 0) {
@@ -246,6 +297,7 @@ public class NewHomeFragment extends BaseMVPFragment<FragmentNewHomeLayoutBindin
         if (isDetached()) {
             return;
         }
+        bindBanner(homeMenuBean.banner);
         if (homeMenuBean != null && homeMenuBean.appMenu != null && homeMenuBean.appMenu.size() > 0) {
             mViewBinding.flTopMenu.setVisibility(View.VISIBLE);
             fragments.clear();

+ 12 - 1
teacher/src/main/res/layout/fragment_new_home_layout.xml

@@ -224,6 +224,17 @@
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintTop_toBottomOf="@+id/iv_cert" />
 
+                <com.youth.banner.Banner
+                    android:id="@+id/banner"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_132"
+                    android:layout_marginLeft="@dimen/dp_14"
+                    android:layout_marginTop="@dimen/dp_10"
+                    android:layout_marginRight="@dimen/dp_14"
+                    app:layout_constraintTop_toBottomOf="@+id/top_view_bg"
+                    android:descendantFocusability="blocksDescendants"
+                    app:banner_indicator_normal_color="@color/transparent"
+                    app:banner_indicator_selected_color="@color/transparent" />
 
                 <androidx.cardview.widget.CardView
                     android:id="@+id/bg_announcement"
@@ -237,7 +248,7 @@
                     app:cardCornerRadius="10dp"
                     app:cardElevation="2dp"
                     app:layout_constraintLeft_toLeftOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/top_view_bg">
+                    app:layout_constraintTop_toBottomOf="@+id/banner">
 
                     <androidx.constraintlayout.widget.ConstraintLayout
                         android:layout_width="match_parent"