Parcourir la source

[컨텐츠][New] 다음 아이템 프리로딩 추가

hyodong.min il y a 7 ans
Parent
commit
0114437bfd

+ 12 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/contents/CustomListicleImageView.java

@@ -201,7 +201,18 @@ public class CustomListicleImageView extends ConstraintLayout {
     }
 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
+    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) {
+      /**
+       * 추가 영역을 지정해서 미리 다음 페이지를 준비(로딩)하도록 한다.
+       *
+       * @param state
+       * @return
+       */
+      @Override
+      protected int getExtraLayoutSpace(RecyclerView.State state) {
+        return 1;
+      }
+    };
     recyclerView.setLayoutManager(linearLayoutManager);
 
     adapter = new CustomListicleImageViewAdapter(context, inflater, contentsDetailImageBeans, event -> {

+ 5 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsCardCoverHolder.java

@@ -4,6 +4,7 @@ import android.view.View;
 import android.widget.ImageView;
 
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
@@ -29,7 +30,10 @@ public class ContentsCardCoverHolder extends ContentsHolder<ContentsDetailBean>
 
   @Override
   protected void bindInternal() {
-    Glide.with(imageViewCardListicleCover).load(bean.getImageUrl()).into(imageViewCardListicleCover);
+    Glide.with(imageViewCardListicleCover)
+      .load(bean.getImageUrl())
+      .transition(new DrawableTransitionOptions().crossFade(100))
+      .into(imageViewCardListicleCover);
   }
 
   @Override

+ 14 - 22
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsCardHolder.java

@@ -1,16 +1,9 @@
 package kr.co.zumo.app.lifeplus.view.screen.contents;
 
-import android.graphics.drawable.Drawable;
-import android.support.annotation.Nullable;
-import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 
 import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.DataSource;
-import com.bumptech.glide.load.engine.GlideException;
-import com.bumptech.glide.request.RequestListener;
-import com.bumptech.glide.request.target.Target;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
@@ -36,22 +29,21 @@ public class ContentsCardHolder extends ContentsHolder<ContentsDetailBean> {
 
   @Override
   protected void bindInternal() {
-    Log.w("APP# ContentsCardHolder | bindInternal", "|" + "-----------------------------------------.. bind..");
-
     Glide.with(imageViewCardListicleCover).load(bean.getImageUrl())
-      .listener(new RequestListener<Drawable>() {
-        @Override
-        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
-          return false;
-        }
-
-        @Override
-        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
-          Log.e("APP#  ContentsCardHolder | onResourceReady", "|" + resource.getIntrinsicWidth());
-          Log.e("APP#  ContentsCardHolder | onResourceReady", "|" + resource.getIntrinsicHeight());
-          return false;
-        }
-      })
+//      .transition(new DrawableTransitionOptions().crossFade(100))
+//      .listener(new RequestListener<Drawable>() {
+//        @Override
+//        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+//          return false;
+//        }
+//
+//        @Override
+//        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+//          Log.e("APP#  ContentsCardHolder | onResourceReady", "|" + resource.getIntrinsicWidth());
+//          Log.e("APP#  ContentsCardHolder | onResourceReady", "|" + resource.getIntrinsicHeight());
+//          return false;
+//        }
+//      })
       .into(imageViewCardListicleCover);
   }
 

+ 5 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsCardListicleHolder.java

@@ -33,11 +33,6 @@ public class ContentsCardListicleHolder extends ContentsHolder<ContentsDetailBea
 
   @Override
   protected void bindInternal() {
-
-  }
-
-  @Override
-  public void attach() {
     Glide.with(imageViewCardListicleImageView).load(bean.getImageUrl()).into(imageViewCardListicleImageView);
 
     layoutMoreInfo.setVisibility(bean.getMoreInfoList().size() == 0 ? View.GONE : View.VISIBLE);
@@ -45,12 +40,16 @@ public class ContentsCardListicleHolder extends ContentsHolder<ContentsDetailBea
     layoutMoreInfo.setOnClickListener(view -> {
       listener.onEvent(new Event.Builder(Event.MORE).index(getAdapterPosition()).build());
     });
+  }
+
+  @Override
+  public void attach() {
 
   }
 
   @Override
   public void detach() {
-    Glide.with(imageViewCardListicleImageView).clear(imageViewCardListicleImageView);
+//    Glide.with(imageViewCardListicleImageView).clear(imageViewCardListicleImageView);
   }
 
 }

+ 15 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsFragment.java

@@ -22,8 +22,6 @@ import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailListBean;
 import kr.co.zumo.app.lifeplus.bean.api.SeriesItemBean;
 import kr.co.zumo.app.lifeplus.helper.ActionBarHelper;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
-import kr.co.zumo.app.lifeplus.view.Event;
-import kr.co.zumo.app.lifeplus.view.IEventListener;
 import kr.co.zumo.app.lifeplus.view.screen.FragmentBase;
 
 /**
@@ -166,14 +164,24 @@ public class ContentsFragment extends FragmentBase<ContentsPresenter> implements
     List<ContentsDetailBean> contentsDetailBeans = contentsDetailListBean.getItemDetailList();
     List<SeriesItemBean> seriesItemBeans = contentsDetailListBean.getSeriesItemList();
 
-    adapter = new ContentsAdapter(getActivity(), contentsDetailBeans, seriesItemBeans, contentsDetailListBean.getSeriesInfo(), new IEventListener() {
+    adapter = new ContentsAdapter(getActivity(), contentsDetailBeans, seriesItemBeans, contentsDetailListBean.getSeriesInfo(), event -> {
+      presenter.onEvent(event);
+    });
+
+    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
+      /**
+       * 추가 영역을 지정해서 미리 다음 페이지를 준비(로딩)하도록 한다.
+       *
+       * @param state
+       * @return
+       */
       @Override
-      public void onEvent(Event event) {
-        presenter.onEvent(event);
+      protected int getExtraLayoutSpace(RecyclerView.State state) {
+        return 1;
       }
-    });
+    };
+    recyclerViewContentsDetail.setLayoutManager(layoutManager);
 
-    recyclerViewContentsDetail.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
     recyclerViewContentsDetail.setAdapter(adapter);
   }
 

+ 8 - 5
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsListicleCoverHolder.java

@@ -5,6 +5,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
 
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
@@ -50,11 +51,9 @@ public class ContentsListicleCoverHolder extends ContentsHolder<ContentsDetailBe
   @Override
   protected void bindInternal() {
 
-  }
-
-  @Override
-  public void attach() {
-    Glide.with(imageViewBackground).load(bean.getImageUrl()).into(imageViewBackground);
+    Glide.with(imageViewBackground).load(bean.getImageUrl())
+      .transition(new DrawableTransitionOptions().crossFade(100))
+      .into(imageViewBackground);
 
     if (StringUtil.isFull(seriesTitle)) {
       textViewCategory1.setVisibility(View.VISIBLE);
@@ -82,6 +81,10 @@ public class ContentsListicleCoverHolder extends ContentsHolder<ContentsDetailBe
     imageViewArrow.setOnClickListener(view -> {listener.onEvent(new Event.Builder(Event.SCROLL).build());});
   }
 
+  @Override
+  public void attach() {
+  }
+
   @Override
   public void detach() {
 

+ 10 - 21
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsListicleHolder.java

@@ -11,7 +11,6 @@ import kr.co.zumo.app.lifeplus.bean.api.ContentsDescriptionBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailImageBean;
 import kr.co.zumo.app.lifeplus.view.Event;
-import kr.co.zumo.app.lifeplus.view.IEventListener;
 import kr.co.zumo.app.lifeplus.view.custom.contents.CustomListicleImageView;
 import kr.co.zumo.app.lifeplus.view.custom.contents.CustomListicleInformationView;
 
@@ -43,20 +42,12 @@ public class ContentsListicleHolder extends ContentsHolder<ContentsDetailBean> {
   @Override
   protected void bindInternal() {
     List<ContentsDetailImageBean> contentsDetailImageBeans = bean.getItemImageList();
-    customListicleImageView.init(itemView.getContext(), index, bean.getTitle(), bean.getSubTitle(), contentsDetailImageBeans, new IEventListener() {
-      @Override
-      public void onEvent(Event event) {
-      }
-    });
-
-    layoutMoreInfoPopup.setOnClickListener(view -> {
-      listener.onEvent(new Event.Builder(Event.MORE).index(getAdapterPosition()).build());
-    });
-  }
 
-  @Override
-  public void attach() {
+    customListicleImageView.init(itemView.getContext(), index, bean.getTitle(), bean.getSubTitle(), contentsDetailImageBeans, event -> {});
 
+    if (null != layoutContainer) {
+      layoutContainer.removeAllViews();
+    }
 
     for (int i = 0; i < bean.getDescriptionList().size(); i++) {
       ContentsDescriptionBean contentsDescriptionBean = bean.getDescriptionList().get(i);
@@ -69,22 +60,20 @@ public class ContentsListicleHolder extends ContentsHolder<ContentsDetailBean> {
     layoutMoreInfoPopup.setOnClickListener(view -> {
       listener.onEvent(new Event.Builder(Event.MORE).index(getAdapterPosition()).build());
     });
+
     for (int i = 0; i < bean.getMoreInfoList().size(); i++) {
-    //  Log.e("APP#  ContentsListicleHolder | attach", "|" + bean.getMoreInfoList().get(i).getDetailType() + "," + bean.getMoreInfoList().get(i).getMoreInfo());
+      //  Log.e("APP#  ContentsListicleHolder | attach", "|" + bean.getMoreInfoList().get(i).getDetailType() + "," + bean.getMoreInfoList().get(i).getMoreInfo());
     }
+  }
+
+  @Override
+  public void attach() {
 
   }
 
   @Override
   public void detach() {
-//    if (null != customListicleImageView) {
-//      customListicleImageView.dispose();
-//      customListicleImageView = null;
-//    }
 
-    if (null != layoutContainer) {
-      layoutContainer.removeAllViews();
-    }
   }
 
 }

+ 3 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainCategorySnapper.java

@@ -11,7 +11,6 @@ import android.support.v7.widget.RecyclerView.SmoothScroller;
 import android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider;
 import android.support.v7.widget.SnapHelper;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.View;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.Scroller;
@@ -86,7 +85,7 @@ public class MainCategorySnapper extends RecyclerView.OnFlingListener {
 
   @Override
   public boolean onFling(int velocityX, int velocityY) {
-    Log.w("APP# MainCategorySnapper | onFling", "|" + "velocityY: " + velocityY);
+//    Log.w("APP# MainCategorySnapper | onFling", "|" + "velocityY: " + velocityY);
     LayoutManager layoutManager = mRecyclerView.getLayoutManager();
     if (layoutManager == null) {
       return false;
@@ -186,7 +185,7 @@ public class MainCategorySnapper extends RecyclerView.OnFlingListener {
     }
 
     int targetPosition = findTargetSnapPosition(layoutManager, velocityX, velocityY);
-    Log.w("APP# MainCategorySnapper | snapFromFling2", "|" + "targetPosition: " + targetPosition);
+//    Log.w("APP# MainCategorySnapper | snapFromFling2", "|" + "targetPosition: " + targetPosition);
     if (targetPosition == RecyclerView.NO_POSITION) {
       return false;
     }
@@ -217,7 +216,7 @@ public class MainCategorySnapper extends RecyclerView.OnFlingListener {
 
     View snapView = findSnapView(layoutManager);
 
-    Log.i("APP# MainCategorySnapper | snapToTargetExistingView", "|" + snapView);
+//    Log.i("APP# MainCategorySnapper | snapToTargetExistingView", "|" + snapView);
 
     if (snapView == null) {
       return;

+ 1 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainContentsSnapper.java

@@ -11,7 +11,6 @@ import android.support.v7.widget.RecyclerView.SmoothScroller;
 import android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider;
 import android.support.v7.widget.SnapHelper;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.View;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.Scroller;
@@ -84,7 +83,7 @@ public class MainContentsSnapper extends RecyclerView.OnFlingListener {
 
   @Override
   public boolean onFling(int velocityX, int velocityY) {
-    Log.w("APP# MainContentsSnapper | onFling", "|" + "velocityY: " + velocityY);
+//    Log.w("APP# MainContentsSnapper | onFling", "|" + "velocityY: " + velocityY);
     LayoutManager layoutManager = mRecyclerView.getLayoutManager();
     if (layoutManager == null) {
       return false;