浏览代码

Indicator改为自定义View 添加控制是否循环、是否自动轮播

zhpan 7 年之前
父节点
当前提交
af7878d3f3

+ 1 - 0
app/build.gradle

@@ -27,4 +27,5 @@ dependencies {
     compile 'com.android.support:appcompat-v7:25.3.0'
     testCompile 'junit:junit:4.12'
     compile project(':viewpager')
+    compile 'com.github.bumptech.glide:glide:3.7.0'
 }

+ 0 - 1
app/src/main/java/com/example/zhpan/circleviewpager/MainActivity.java

@@ -45,7 +45,6 @@ public class MainActivity extends AppCompatActivity {
         mList.add(dataBean3);
         mList.add(dataBean4);
 
-
         for (int i = 1; i <= 5; i++) {
             int drawable = getResources().getIdentifier("a" + i, "drawable", getPackageName());
             mListInt.add(drawable);

+ 1 - 1
app/src/main/java/com/example/zhpan/circleviewpager/MyViewHolder.java

@@ -7,7 +7,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.example.viewpager.holder.ViewHolder;
-import com.example.viewpager.utils.ImageLoaderUtil;
+import com.example.zhpan.circleviewpager.utils.ImageLoaderUtil;
 
 /**
  * Created by zhpan on 2017/10/30.

+ 1 - 1
viewpager/src/main/java/com/example/viewpager/utils/GlideCircleTransform.java → app/src/main/java/com/example/zhpan/circleviewpager/utils/GlideCircleTransform.java

@@ -1,4 +1,4 @@
-package com.example.viewpager.utils;
+package com.example.zhpan.circleviewpager.utils;
 
 import android.content.Context;
 import android.graphics.Bitmap;

+ 1 - 1
viewpager/src/main/java/com/example/viewpager/utils/GlideRoundTransform.java → app/src/main/java/com/example/zhpan/circleviewpager/utils/GlideRoundTransform.java

@@ -1,4 +1,4 @@
-package com.example.viewpager.utils;
+package com.example.zhpan.circleviewpager.utils;
 
 import android.content.Context;
 import android.content.res.Resources;

+ 5 - 5
viewpager/src/main/java/com/example/viewpager/utils/ImageLoaderUtil.java → app/src/main/java/com/example/zhpan/circleviewpager/utils/ImageLoaderUtil.java

@@ -1,4 +1,4 @@
-package com.example.viewpager.utils;
+package com.example.zhpan.circleviewpager.utils;
 
 import android.graphics.Bitmap;
 import android.os.Environment;
@@ -31,7 +31,7 @@ public class ImageLoaderUtil {
                 .into(v);
     }
 
-    public static void loadImg(ImageView v, String url,@DrawableRes int placeholder) {
+    public static void loadImg(ImageView v, String url, @DrawableRes int placeholder) {
         Glide.with(v.getContext())
                 .load(url)
                 .fitCenter()
@@ -51,7 +51,7 @@ public class ImageLoaderUtil {
     }
 
 
-    public static void loadCircleImg(ImageView v, String url,@DrawableRes int placeholder) {
+    public static void loadCircleImg(ImageView v, String url, @DrawableRes int placeholder) {
         Glide.with(v.getContext())
                 .load(url)
                 .placeholder(placeholder)
@@ -59,11 +59,11 @@ public class ImageLoaderUtil {
                 .into(v);
     }
 
-    public static void loadRoundImg(ImageView v, String url,@DrawableRes int placeholder) {
+    public static void loadRoundImg(ImageView v, String url, @DrawableRes int placeholder) {
         Glide.with(v.getContext())
                 .load(url)
                 .transform(new GlideRoundTransform(v.getContext()))
-               .placeholder(placeholder)
+                .placeholder(placeholder)
                 .into(v);
     }
 

+ 0 - 1
viewpager/build.gradle

@@ -28,5 +28,4 @@ dependencies {
     })
     compile 'com.android.support:appcompat-v7:25.3.1'
     testCompile 'junit:junit:4.12'
-    compile 'com.github.bumptech.glide:glide:3.7.0'
 }

+ 1 - 4
viewpager/src/main/java/com/example/viewpager/adapter/CirclePagerAdapter.java

@@ -3,18 +3,15 @@ package com.example.viewpager.adapter;
 import android.support.v4.view.PagerAdapter;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 
 import com.example.viewpager.holder.HolderCreator;
 import com.example.viewpager.holder.ViewHolder;
-import com.example.viewpager.utils.ImageLoaderUtil;
 import com.example.viewpager.view.CircleViewPager;
 
 import java.util.List;
 
 /**
  * Created by zhpan on 2017/3/28.
- *
  */
 
 public class CirclePagerAdapter<T> extends PagerAdapter {
@@ -54,7 +51,7 @@ public class CirclePagerAdapter<T> extends PagerAdapter {
         }
         View view = holder.createView(container.getContext());
         if (list != null && list.size() > 0) {
-            holder.onBind(container.getContext(),list.get(position));
+            holder.onBind(container.getContext(), list.get(position));
         }
         view.setOnClickListener(new View.OnClickListener() {
             @Override

+ 0 - 51
viewpager/src/main/java/com/example/viewpager/utils/ScreenUtils.java

@@ -1,51 +0,0 @@
-package com.example.viewpager.utils;
-
-import android.content.Context;
-import android.util.DisplayMetrics;
-
-/**
- * ScreenUtils
- */
-public class ScreenUtils {
-    private static int screenW;
-    private static int screenH;
-    private static float screenDensity;
-
-    public static int getScreenW(Context context){
-        if (screenW == 0){
-            initScreen(context);
-        }
-        return screenW;
-    }
-
-    public static int getScreenH(Context context){
-        if (screenH == 0){
-            initScreen(context);
-        }
-        return screenH;
-    }
-
-    public static float getScreenDensity(Context context){
-        if (screenDensity == 0){
-            initScreen(context);
-        }
-        return screenDensity;
-    }
-
-    private static void initScreen(Context context){
-        DisplayMetrics metric = context.getResources().getDisplayMetrics();
-        screenW = metric.widthPixels;
-        screenH = metric.heightPixels;
-        screenDensity = metric.density;
-    }
-
-   
-    public static int dp2px(Context context, float dpValue) {
-        return (int) (dpValue * getScreenDensity(context) + 0.5f);
-    }
-
-    
-    public static int px2dp(Context context, float pxValue) {
-        return (int) (pxValue / getScreenDensity(context) + 0.5f);
-    }
-}

+ 20 - 13
viewpager/src/main/java/com/example/viewpager/view/CircleViewPager.java

@@ -1,5 +1,6 @@
 package com.example.viewpager.view;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Color;
@@ -18,7 +19,7 @@ import com.example.viewpager.R;
 import com.example.viewpager.adapter.CirclePagerAdapter;
 import com.example.viewpager.holder.HolderCreator;
 import com.example.viewpager.holder.ViewHolder;
-import com.example.viewpager.utils.ScreenUtils;
+import com.example.viewpager.utils.DensityUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,7 +34,7 @@ public class CircleViewPager<T> extends FrameLayout {
     //  重新构造后的轮播数据集合
     private List<T> mListAdd;
     //  指示器图片集合
-    private List<DotView> mIvDotList;
+    private List<DotView> mDotList;
     //   轮播原点宽度
     private float mDotWidth;
     //  图片切换时间间隔
@@ -122,7 +123,7 @@ public class CircleViewPager<T> extends FrameLayout {
         mViewPager = (ViewPager) mView.findViewById(R.id.vp_main);
         mList = new ArrayList<>();
         mListAdd = new ArrayList<>();
-        mIvDotList = new ArrayList<>();
+        mDotList = new ArrayList<>();
     }
 
     private void setIndicatorLocation() {
@@ -142,16 +143,19 @@ public class CircleViewPager<T> extends FrameLayout {
     //  根据mList数据集构造mListAdd
     private void initData() {
         if (mList.size() == 0) {
-            mView.setVisibility(GONE);
+            setVisibility(GONE);
         } else if (mList.size() == 1) {
             mListAdd.add(mList.get(0));
+            setVisibility(VISIBLE);
         } else if (mList.size() > 1) {
             createData();
+            setVisibility(VISIBLE);
         }
     }
 
     private void createData() {
         if (isCanLoop) {
+            mListAdd.clear();
             currentPosition = 1;
             for (int i = 0; i < mList.size() + 2; i++) {
                 if (i == 0) {   //  判断当i=0为该处的mList的最后一个数据作为mListAdd的第一个数据
@@ -163,7 +167,7 @@ public class CircleViewPager<T> extends FrameLayout {
                 }
             }
         } else {
-            mListAdd.addAll(mList);
+            mListAdd = mList;
         }
     }
 
@@ -208,6 +212,8 @@ public class CircleViewPager<T> extends FrameLayout {
 
     //  设置轮播小圆点
     private void setIndicatorImage() {
+        // mDotList.clear();
+        mLlDot.removeAllViews();
         //  设置LinearLayout的子控件的宽高,这里单位是像素。
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) mDotWidth, (int) mDotWidth);
         params.rightMargin = (int) (mDotWidth / 1.5);
@@ -220,12 +226,12 @@ public class CircleViewPager<T> extends FrameLayout {
                 dotView.setCheckedColor(indicatorCheckedColor);
                 dotView.setChecked(false);
                 mLlDot.addView(dotView);
-                mIvDotList.add(dotView);
+                mDotList.add(dotView);
             }
         }
         //设置第一个小圆点图片背景为红色
         if (mList.size() > 1) {
-            mIvDotList.get(dotPosition).setChecked(true);
+            mDotList.get(dotPosition).setChecked(true);
         }
     }
 
@@ -261,7 +267,8 @@ public class CircleViewPager<T> extends FrameLayout {
         if (list == null || holderCreator == null) {
             return;
         }
-        mList.addAll(list);
+        mList = list;
+        //mList.addAll(list);
         this.holderCreator = holderCreator;
     }
 
@@ -301,14 +308,14 @@ public class CircleViewPager<T> extends FrameLayout {
                 dotPosition = position - 1;
             }
             //  把之前的小圆点设置背景为暗红,当前小圆点设置为红色
-            mIvDotList.get(prePosition).setChecked(false);
-            mIvDotList.get(dotPosition).setChecked(true);
+            mDotList.get(prePosition).setChecked(false);
+            mDotList.get(dotPosition).setChecked(true);
             prePosition = dotPosition;
         } else {
             currentPosition = position;
             //  把之前的小圆点设置背景为暗红,当前小圆点设置为红色
-            mIvDotList.get(prePosition).setChecked(false);
-            mIvDotList.get(currentPosition).setChecked(true);
+            mDotList.get(prePosition).setChecked(false);
+            mDotList.get(currentPosition).setChecked(true);
             prePosition = currentPosition;
         }
 
@@ -330,7 +337,7 @@ public class CircleViewPager<T> extends FrameLayout {
     }
 
     public void setDotWidth(float dotWidth) {
-        mDotWidth = ScreenUtils.dp2px(getContext(), dotWidth);
+        mDotWidth = DensityUtils.dp2px(getContext(), dotWidth);
     }
 
     /**

+ 1 - 2
viewpager/src/main/res/layout/banner_item.xml

@@ -7,6 +7,5 @@
         android:id="@+id/banner_image"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:scaleType="centerCrop"
-        />
+        android:scaleType="centerCrop" />
 </LinearLayout>