Prechádzať zdrojové kódy

Merge branch 'develop' of https://github.com/swict/LifeplusAndroid into develop

hyodong.min 6 rokov pred
rodič
commit
0ef873ad71

+ 19 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/category/banner/MainBannerView.java

@@ -13,7 +13,9 @@ import java.util.List;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.IImageTitleBean;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
+import kr.co.zumo.app.lifeplus.view.IndexScrollListener;
 import kr.co.zumo.app.lifeplus.view.screen.contents.CustomPagerSnapHelper;
+import kr.co.zumo.app.lifeplus.view.screen.event.CustomIndicator;
 
 /**
  * MainBannerView
@@ -29,6 +31,7 @@ public class MainBannerView extends ConstraintLayout {
 
   private MainBannerAdapter mainBannerAdapter;
   private RecyclerView recyclerView;
+  private CustomIndicator customIndicator;
 
   public MainBannerView(Context context) {
     super(context);
@@ -46,29 +49,39 @@ public class MainBannerView extends ConstraintLayout {
 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     inflater.inflate(R.layout.main_banner_view, this);
-
+    customIndicator = findViewById(R.id.custom_indicator);
     recyclerView = findViewById(R.id.recycler_view_main_banner_view);
     CustomPagerSnapHelper snapHelper = new CustomPagerSnapHelper();
     recyclerView.setNestedScrollingEnabled(false);
-    recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) {
+
+    LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) {
       @Override
       protected int getExtraLayoutSpace(RecyclerView.State state) {
         return 1;
       }
+    };
+    recyclerView.setLayoutManager(layoutManager);
+    customIndicator.setIndicatorSetting(recyclerView, R.color.C4DFFFFFF, R.color.CFFFFFF, event -> {
+      Log.e("APP#  MainBannerView | init", "|" + event.getIndex());
+      recyclerView.smoothScrollToPosition(event.getIndex());
+    });
+
+
+    IndexScrollListener indexScrollListener = new IndexScrollListener(layoutManager, index -> {
+      customIndicator.onChangedIndex(index);
     });
 
+    recyclerView.addOnScrollListener(indexScrollListener);
+
     mainBannerAdapter = new MainBannerAdapter(inflater, textImageBeanList, event -> {
-      Log.i("APP# MainBannerView | onEvent", "|" + event);
       if (null != listener) {
         listener.onEvent(event);
       }
     }, isDimLayerEnabled);
+
     recyclerView.setOnFlingListener(null);
     snapHelper.attachToRecyclerView(recyclerView);
     recyclerView.setAdapter(mainBannerAdapter);
-
-    recyclerView.addItemDecoration(new MainBannerViewItemDotIndicator(getContext(), R.color.C4DFFFFFF, R.color.CFFFFFF, 0));
-
   }
 
   public void dispose() {

+ 4 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/custom/recommend/RecommendContentsView.java

@@ -130,7 +130,10 @@ public class RecommendContentsView extends ConstraintLayout {
   public void draw(Context context, List<? extends LifeplusContentsBean> withItemList, IEventListener listener) {
     List<? extends LifeplusContentsBean> withItemList1 = withItemList;
 
-    customIndicator.setIndicatorSetting(recyclerViewRecommendContents, R.color.C19000000, R.color.C000000);
+    customIndicator.setIndicatorSetting(recyclerViewRecommendContents, R.color.C19000000, R.color.C000000, event -> {
+      Log.e("APP#  RecommendContentsView | onEvent", "|" + event.getIndex());
+      recyclerViewRecommendContents.smoothScrollToPosition(event.getIndex());
+    });
     if (null == withItemList) {
       Log.e("APP#  RecommendContentsView | draw", "|" + "withItemList is null......");
       return;

+ 36 - 9
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/event/CustomIndicator.java

@@ -7,8 +7,13 @@ import android.graphics.Paint;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.RecyclerView;
 import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
 import android.view.View;
 
+import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.IEventListener;
+
 /**
  * CustomIndicator
  * <pre>
@@ -41,18 +46,24 @@ public class CustomIndicator extends View {
   private int activeColor;
   private int inActiveColor;
   private int activePosition;
+  private float totalLength;
+  private float indicatorTotalWidth;
+  private float indicatorStartX;
+  private int itemCount;
 
   private static final float DP = Resources.getSystem().getDisplayMetrics().density;
   private final int mIndicatorHeight = (int) (DP * 16);
-  private final float mIndicatorStrokeWidth = DP * 2;
+  private final float mIndicatorStrokeWidth = DP * 10;
   private final float mIndicatorItemLength = DP * 4;
   private final float mIndicatorItemPadding = DP * 8;
   private final Paint mPaint = new Paint();
+  private IEventListener listener;
 
-  public void setIndicatorSetting(RecyclerView recyclerview, int inActiveColor, int activeColor) {
+  public void setIndicatorSetting(RecyclerView recyclerview, int inActiveColor, int activeColor, IEventListener listener) {
     this.recyclerView = recyclerview;
     this.inActiveColor = inActiveColor;
     this.activeColor = activeColor;
+    this.listener = listener;
     mPaint.setStrokeCap(Paint.Cap.ROUND);
     mPaint.setStrokeWidth(mIndicatorStrokeWidth);
     mPaint.setStyle(Paint.Style.FILL);
@@ -70,16 +81,14 @@ public class CustomIndicator extends View {
       return;
     }
 
-    int itemCount = recyclerView.getAdapter().getItemCount();
-    float totalLength = mIndicatorItemLength * itemCount;
+    itemCount = recyclerView.getAdapter().getItemCount();
+    totalLength = mIndicatorItemLength * itemCount;
     float paddingBetweenItems = Math.max(0, itemCount - 1) * mIndicatorItemPadding;
-    float indicatorTotalWidth = totalLength + paddingBetweenItems;
-    float indicatorStartX = (recyclerView.getWidth() - indicatorTotalWidth) / 2F;
-    //float indicatorPosY = getHeight() - 38F * DP;
+    indicatorTotalWidth = totalLength + paddingBetweenItems; //인디케이터 width
+    indicatorStartX = (recyclerView.getWidth() - indicatorTotalWidth) / 2F; //중앙
     float indicatorPosY = getHeight() - mIndicatorHeight / 2F;
 
 
-
     drawInactiveIndicators(canvas, indicatorStartX, indicatorPosY, itemCount);
     if (activePosition == RecyclerView.NO_POSITION) {
       return;
@@ -89,7 +98,7 @@ public class CustomIndicator extends View {
 
   private void drawInactiveIndicators(Canvas c, float indicatorStartX, float indicatorPosY, int itemCount) {
     mPaint.setColor(context.getResources().getColor(inActiveColor));
-    final float itemWidth = mIndicatorItemLength + mIndicatorItemPadding;
+    float itemWidth = mIndicatorItemLength + mIndicatorItemPadding; //한칸
 
     float start = indicatorStartX;
     for (int i = 0; i < itemCount; i++) {
@@ -116,4 +125,22 @@ public class CustomIndicator extends View {
     }
   }
 
+  @Override
+  public boolean onTouchEvent(MotionEvent event) {
+    Log.e("APP#  CustomIndicator | onTouchEvent", "|" + "==== > ");
+    if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
+      return true;
+    }
+    else if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
+      float itemWidth = mIndicatorItemLength + mIndicatorItemPadding;
+      int index = (int) Math.floor((event.getX() - indicatorStartX) / itemWidth); //인디케이터 안에서 찍힌 x 좌표
+      Log.e("APP#  CustomIndicator | onTouchEvent", "index |" + index);
+      if (index >= 0 && index < itemCount) {
+        listener.onEvent(new Event.Builder(Event.CLICK).index((int) index).build());
+      }
+      //return true;
+    }
+
+    return super.onTouchEvent(event);
+  }
 }

+ 1 - 1
app/src/main/res/layout/fragment_event.xml

@@ -21,7 +21,7 @@
   <android.support.design.widget.TabLayout
     android:id="@+id/tab_layout_event"
     android:layout_width="match_parent"
-    android:layout_height="10dp"
+    android:layout_height="20dp"
     android:layout_marginBottom="10dp"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"

+ 9 - 0
app/src/main/res/layout/main_banner_view.xml

@@ -10,4 +10,13 @@
     android:id="@+id/recycler_view_main_banner_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>
+
+  <kr.co.zumo.app.lifeplus.view.screen.event.CustomIndicator
+    android:id="@+id/custom_indicator"
+    android:layout_width="match_parent"
+    android:layout_height="18dp"
+    app:layout_constraintBottom_toBottomOf="@+id/recycler_view_main_banner_view"
+    app:layout_constraintEnd_toEndOf="parent"
+    app:layout_constraintStart_toStartOf="parent"
+    />
 </android.support.constraint.ConstraintLayout>

+ 1 - 1
app/src/main/res/layout/recommend_contents_view.xml

@@ -51,7 +51,7 @@
   <kr.co.zumo.app.lifeplus.view.screen.event.CustomIndicator
     android:id="@+id/custom_indicator"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="18dp"
     android:layout_marginBottom="33dp"
     app:layout_constraintBottom_toBottomOf="parent"
     app:layout_constraintEnd_toEndOf="parent"