Browse Source

代码优化

zhpan 7 years ago
parent
commit
fe80777b60

+ 1 - 0
.idea/gradle.xml

@@ -9,6 +9,7 @@
           <set>
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/app" />
+            <option value="$PROJECT_DIR$/viewpager" />
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />

+ 1 - 4
.idea/modules.xml

@@ -3,11 +3,8 @@
   <component name="ProjectModuleManager">
     <modules>
       <module fileurl="file://$PROJECT_DIR$/CircleViewPager.iml" filepath="$PROJECT_DIR$/CircleViewPager.iml" />
-      <module fileurl="file://$PROJECT_DIR$/CircleViewPager.iml" filepath="$PROJECT_DIR$/CircleViewPager.iml" />
-      <module fileurl="file://$PROJECT_DIR$/CircleViewPager.iml" filepath="$PROJECT_DIR$/CircleViewPager.iml" />
-      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
-      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
       <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
+      <module fileurl="file://$PROJECT_DIR$/viewpager/viewpager.iml" filepath="$PROJECT_DIR$/viewpager/viewpager.iml" />
     </modules>
   </component>
 </project>

+ 3 - 3
app/build.gradle

@@ -5,7 +5,7 @@ android {
     buildToolsVersion "25.0.2"
     defaultConfig {
         applicationId "com.example.zhpan.circleviewpager"
-        minSdkVersion 15
+        minSdkVersion 17
         targetSdkVersion 25
         versionCode 1
         versionName "1.0"
@@ -20,11 +20,11 @@ android {
 }
 
 dependencies {
-    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile fileTree(include: ['*.jar'], dir: 'libs')
     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
     compile 'com.android.support:appcompat-v7:25.3.0'
     testCompile 'junit:junit:4.12'
-    compile 'com.github.bumptech.glide:glide:3.7.0'
+    compile project(':viewpager')
 }

+ 17 - 7
app/src/main/java/com/example/zhpan/circleviewpager/MainActivity.java

@@ -3,39 +3,49 @@ package com.example.zhpan.circleviewpager;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.widget.Toast;
-
+import com.example.viewpager.view.CircleViewPager;
 import java.util.ArrayList;
 import java.util.List;
 
 public class MainActivity extends AppCompatActivity {
 
     private CircleViewPager mViewpager;
-    //private int[] images={R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5};
-    private List<String> mList=new ArrayList<>();
+    private List<String> mList = new ArrayList<>();
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         initView();
+        initData();
+        setViewPager();
     }
 
     private void initView() {
+        mViewpager = (CircleViewPager) findViewById(R.id.viewpager);
+    }
+
+    private void initData() {
         mList.add("http://pic.58pic.com/58pic/15/36/01/17C58PICR67_1024.jpg");
         mList.add("http://img.tupianzj.com/uploads/allimg/160822/9-160R2213608.jpg");
         mList.add("http://img1.ph.126.net/3NuwEWzx-efuHLUhoAg1Rw==/1459447754345023507.jpg");
         mList.add("http://pic.58pic.com/58pic/15/36/02/06Q58PICH7S_1024.jpg");
         mList.add("http://images.jfdaily.com/jiefang/life/new/201502/W020150213267781833219.jpg");
-        mViewpager = (CircleViewPager) findViewById(R.id.viewpager);
-        //mViewpager.setImages(images);
-        mViewpager.setDarkDotRes(R.mipmap.ic_launcher);
+    }
+
+    private void setViewPager() {
+        mViewpager.setDarkDotRes(R.drawable.red_dot_night);
+        mViewpager.setLightDotRes(R.drawable.red_dot);
         mViewpager.setDotWidth(10);
         mViewpager.setInterval(5000);
         mViewpager.setUrlList(mList);
         mViewpager.setOnPageClickListener(new CircleViewPager.OnPageClickListener() {
             @Override
             public void pageClickListener(int position) {
-                Toast.makeText(MainActivity.this, mList.get(position), Toast.LENGTH_SHORT).show();
+                Toast.makeText(MainActivity.this, mViewpager.getUrlList().get(position), Toast.LENGTH_SHORT).show();
             }
         });
     }
+
+
 }

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

@@ -5,7 +5,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.example.zhpan.circleviewpager.CircleViewPager
+    <com.example.viewpager.view.CircleViewPager
         android:id="@+id/viewpager"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>

+ 1 - 1
settings.gradle

@@ -1 +1 @@
-include ':app'
+include ':app', ':viewpager'

+ 1 - 0
viewpager/.gitignore

@@ -0,0 +1 @@
+/build

+ 32 - 0
viewpager/build.gradle

@@ -0,0 +1,32 @@
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion "25.0.3"
+
+    defaultConfig {
+        minSdkVersion 17
+        targetSdkVersion 25
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+        exclude group: 'com.android.support', module: 'support-annotations'
+    })
+    compile 'com.android.support:appcompat-v7:25.3.1'
+    testCompile 'junit:junit:4.12'
+    compile 'com.github.bumptech.glide:glide:3.7.0'
+}

+ 25 - 0
viewpager/proguard-rules.pro

@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Users\zhpan\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
viewpager/src/androidTest/java/com/example/viewpager/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.example.viewpager;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getTargetContext();
+
+        assertEquals("com.example.viewpager.test", appContext.getPackageName());
+    }
+}

+ 10 - 0
viewpager/src/main/AndroidManifest.xml

@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+
+    package="com.example.viewpager">
+
+    <application android:allowBackup="true" android:label="@string/app_name"
+        android:supportsRtl="true">
+
+    </application>
+
+</manifest>

+ 11 - 12
app/src/main/java/com/example/zhpan/circleviewpager/CirclePagerAdapter.java → viewpager/src/main/java/com/example/viewpager/adapter/CirclePagerAdapter.java

@@ -1,24 +1,25 @@
-package com.example.zhpan.circleviewpager;
+package com.example.viewpager.adapter;
 
 import android.support.v4.view.PagerAdapter;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
-import android.widget.Toast;
+
+import com.example.viewpager.view.CircleViewPager;
 
 import java.util.List;
 
 /**
- * Created by edianzu on 2017/3/28.
+ * Created by zhpan on 2017/3/28.
  */
 
 public class CirclePagerAdapter extends PagerAdapter {
-    List<ImageView> list;
-    CircleViewPager viewPager;
+    private List<ImageView> list;
+    private CircleViewPager viewPager;
 
-    public CirclePagerAdapter(List<ImageView> list,CircleViewPager viewPager) {
+    public CirclePagerAdapter(List<ImageView> list, CircleViewPager viewPager) {
         this.list = list;
-        this.viewPager=viewPager;
+        this.viewPager = viewPager;
     }
 
     @Override
@@ -28,17 +29,17 @@ public class CirclePagerAdapter extends PagerAdapter {
 
     @Override
     public boolean isViewFromObject(View view, Object object) {
-        return view==object;
+        return view == object;
     }
 
     @Override
     public Object instantiateItem(final ViewGroup container, final int position) {
-        ImageView imageView=list.get(position);
+        ImageView imageView = list.get(position);
         container.addView(imageView);
         imageView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                    viewPager.imageClick(position-1);
+                viewPager.imageClick(position - 1);
             }
         });
         return list.get(position);
@@ -48,6 +49,4 @@ public class CirclePagerAdapter extends PagerAdapter {
     public void destroyItem(ViewGroup container, int position, Object object) {
         container.removeView(list.get(position));
     }
-
-
 }

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

@@ -1,4 +1,4 @@
-package com.example.zhpan.circleviewpager.utils;
+package com.example.viewpager.utils;
 
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -10,7 +10,7 @@ import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
 import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
 
 /**
- * Created by baixiaokang on 16/5/6.
+ * Created by zhpan on 16/5/6.
  */
 public class GlideCircleTransform extends BitmapTransformation {
     public GlideCircleTransform(Context context) {

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

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

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

@@ -1,4 +1,4 @@
-package com.example.zhpan.circleviewpager.utils;
+package com.example.viewpager.utils;
 
 import android.graphics.Bitmap;
 import android.os.Environment;
@@ -6,9 +6,11 @@ import android.support.annotation.DrawableRes;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
+
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.request.target.SizeReadyCallback;
+
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;

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

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

+ 84 - 159
app/src/main/java/com/example/zhpan/circleviewpager/CircleViewPager.java → viewpager/src/main/java/com/example/viewpager/view/CircleViewPager.java

@@ -1,8 +1,9 @@
-package com.example.zhpan.circleviewpager;
+package com.example.viewpager.view;
 
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.os.Handler;
+import android.support.annotation.DrawableRes;
 import android.support.v4.view.ViewPager;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -11,32 +12,26 @@ import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.Toast;
-
-import com.bumptech.glide.Glide;
-import com.example.zhpan.circleviewpager.utils.ImageLoaderUtil;
-import com.example.zhpan.circleviewpager.utils.ScreenUtils;
+import com.example.viewpager.adapter.CirclePagerAdapter;
+import com.example.viewpager.R;
+import com.example.viewpager.utils.ImageLoaderUtil;
+import com.example.viewpager.utils.ScreenUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * Created by edianzu on 2017/3/28.
+ * Created by zhpan on 2017/3/28.
  */
 
 public class CircleViewPager extends FrameLayout {
-    private View mView;
     private ViewPager mViewPager;
-    private List<ImageView> mImageViewList;
-    private List<ImageView> mImageViewDotList;
+    //  图片对应的ImageView的集合
+    private List<ImageView> mIvList;
+    //  圆点对应的ImageView的集合
+    private List<ImageView> mIvDotList;
     //    图片连接集合
     private List<String> mUrlList;
-    private int[] images;
-    private LinearLayout mLinearLayoutDot;
-    private int dotPosition = 0;
-    private int prePosition = 0;
-    private int currentPosition = 1;
-    private CirclePagerAdapter adapter;
 
     //  选中时轮播圆点资源id
     private int mLightDotRes;
@@ -46,12 +41,16 @@ public class CircleViewPager extends FrameLayout {
     private float mDotWidth;
     //  图片切换时间间隔
     private int interval;
-    //图片的数量,item的数量
-    private int imgsize = 0;
 
-    private OnPageClickListener mOnPageClickListener;
+    //  圆点位置
+    private int dotPosition = 0;
+    //  图片上一个位置
+    private int prePosition = 0;
+    //  图片当前位置
+    private int currentPosition = 1;
 
-    private Context mContext;
+    private LinearLayout mLinearLayoutDot;
+    private OnPageClickListener mOnPageClickListener;
 
     Handler mHandler = new Handler();
     Runnable mRunnable = new Runnable() {
@@ -69,32 +68,31 @@ public class CircleViewPager extends FrameLayout {
 
     public CircleViewPager(Context context) {
         super(context);
-        initView(null);
+        init(null);
     }
 
     public CircleViewPager(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
-        initView(attrs);
+        init(attrs);
     }
 
     public CircleViewPager(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
-        this.mContext=context;
-        initView(attrs);
+        init(attrs);
     }
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
         if (changed) {
-            initData();
-            setDot();
+            initImage();
+            setDotImage();
             setViewPager();
-            startLoopViewPager();
+
         }
     }
 
-    private void initView(AttributeSet attrs) {
+    private void init(AttributeSet attrs) {
         if (attrs != null) {
             TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.MyViewPager);
             mLightDotRes = typedArray.getResourceId(R.styleable.MyViewPager_lightDotRes, R.drawable.red_dot);
@@ -102,120 +100,61 @@ public class CircleViewPager extends FrameLayout {
             mDotWidth = typedArray.getDimension(R.styleable.MyViewPager_dotWidth, 20);
             interval = typedArray.getInteger(R.styleable.MyViewPager_interval, 3000);
         }
-        mView = LayoutInflater.from(getContext()).inflate(R.layout.view_pager_layout, this);
+        View mView = LayoutInflater.from(getContext()).inflate(R.layout.view_pager_layout, this);
         mLinearLayoutDot = (LinearLayout) mView.findViewById(R.id.ll_main_dot);
         mViewPager = (ViewPager) mView.findViewById(R.id.vp_main);
-    }
-
-    private void initAdimgs(List<String> urls) {
-        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
-                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
-
-        int length=urls.size();
-        if(urls.size()==1){
-            length=1;
-        }else if (urls.size()>1) {
-            length = urls.size() + 2;
-        }
-        mImageViewList = new ArrayList<>(length);
-        for (int i = 0; i < length; i++) {
-            ImageView imageView = new ImageView(mContext);
-            imageView.setLayoutParams(params);
-            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-            mImageViewList.add(i,imageView);
-            //mImageViewList[i] = imageView;
-        }
-        setImg(length, urls);
-    }
 
-    private void setImg(int length, List<String> urls) {
-        if(urls.size()==1){
-            Glide.with(mContext).load(urls.get(0)).placeholder(R.mipmap.ic_launcher)
-                    .into(mImageViewList.get(0));
-            mImageViewList.get(0).setOnClickListener(new View.OnClickListener() {
-
-                @Override
-                public void onClick(View v) {
-                    /*if (onAdItemClickListener != null) {
-                        onAdItemClickListener.onItemClick(mImageViews[0], (forwardUrl!=null &&forwardUrl.size()>0)?forwardUrl.get(0):"");
-                    }*/
-                }
-            });
-        }else if (urls.size() > 1) {
-            imgsize = length;
-            for (int i = 0; i < length; i++) {
-                if (i < length - 2) {
-                    final int index = i;
-                    Glide.with(mContext).load(urls.get(i)).placeholder(R.mipmap.ic_launcher)
-                            .into(mImageViewList.get(i+1));
-                    mImageViewList.get(i+1).setOnClickListener(new View.OnClickListener() {
-
-                        @Override
-                        public void onClick(View v) {
-                           /* if (onAdItemClickListener != null) {
-                                onAdItemClickListener.onItemClick(mImageViews[index + 1], (forwardUrl!=null &&forwardUrl.size()>index)?forwardUrl.get(index):"");
-                            }*/
-                        }
-                    });
-                }
-            }
-
-            Glide.with(mContext).load(urls.get(urls.size() - 1)).placeholder(R.mipmap.ic_launcher)
-                    .into(mImageViewList.get(0));
-            Glide.with(mContext).load(urls.get(0)).placeholder(R.mipmap.ic_launcher)
-                    .into(mImageViewList.get(length-1));
-        }
+        mIvList = new ArrayList<>();
+        mIvDotList = new ArrayList<>();
     }
 
-
-    private void initData() {
-        mImageViewList = new ArrayList<>();
-        mImageViewDotList = new ArrayList<>();
+    //  根据图片URL创建对应的ImageView并添加到集合
+    private void initImage() {
         ImageView imageView;
         if (mUrlList.size() > 0) {
             for (int i = 0; i < mUrlList.size() + 2; i++) {
                 if (i == 0) {   //判断当i=0为该处的ImageView设置最后一张图片作为背景
                     imageView = new ImageView(getContext());
-                    //imageView.setBackgroundResource(images[images.length - 1]);
-                    ImageLoaderUtil.loadImg(imageView,mUrlList.get(mUrlList.size()-1));
-                    mImageViewList.add(imageView);
-
+                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
+                    ImageLoaderUtil.loadImg(imageView, mUrlList.get(mUrlList.size() - 1));
+                    mIvList.add(imageView);
                 } else if (i == mUrlList.size() + 1) {   //判断当i=images.length+1时为该处的ImageView设置第一张图片作为背景
                     imageView = new ImageView(getContext());
-                   // imageView.setBackgroundResource(images[0]);
-                     ImageLoaderUtil.loadImg(imageView,mUrlList.get(0));
-                    mImageViewList.add(imageView);
+                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
+                    ImageLoaderUtil.loadImg(imageView, mUrlList.get(0));
+                    mIvList.add(imageView);
                 } else {  //其他情况则为ImageView设置images[i-1]的图片作为背景
                     imageView = new ImageView(getContext());
-                   // imageView.setBackgroundResource(images[i - 1]);
-                     ImageLoaderUtil.loadImg(imageView,mUrlList.get(i-1));
-                    mImageViewList.add(imageView);
+                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
+                    ImageLoaderUtil.loadImg(imageView, mUrlList.get(i - 1));
+                    mIvList.add(imageView);
                 }
             }
+        }
+    }
 
-
-
-            mViewPager.setOnTouchListener(new OnTouchListener() {
-                @Override
-                public boolean onTouch(View v, MotionEvent event) {
-                    int action = event.getAction();
-                    switch (action) {
-                        case MotionEvent.ACTION_DOWN:
-                        case MotionEvent.ACTION_MOVE:
-                            isLoop = true;
-                            stopLoopViewPager();
-                            break;
-                        case MotionEvent.ACTION_UP:
-                        case MotionEvent.ACTION_CANCEL:
-                            isLoop = false;
-                            startLoopViewPager();
-                        default:
-                            break;
-                    }
-                    return false;
+    //  设置触摸事件,当滑动或者触摸时停止自动轮播
+    private void setTouchListener() {
+        mViewPager.setOnTouchListener(new OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                int action = event.getAction();
+                switch (action) {
+                    case MotionEvent.ACTION_DOWN:
+                    case MotionEvent.ACTION_MOVE:
+                        isLoop = true;
+                        stopLoopViewPager();
+                        break;
+                    case MotionEvent.ACTION_UP:
+                    case MotionEvent.ACTION_CANCEL:
+                        isLoop = false;
+                        startLoopViewPager();
+                    default:
+                        break;
                 }
-            });
-        }
+                return false;
+            }
+        });
     }
 
     private void startLoopViewPager() {
@@ -233,7 +172,7 @@ public class CircleViewPager extends FrameLayout {
     }
 
     //  设置轮播小圆点
-    private void setDot() {
+    private void setDotImage() {
         //  设置LinearLayout的子控件的宽高,这里单位是像素。
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) mDotWidth, (int) mDotWidth);
         params.rightMargin = (int) (mDotWidth / 1.5);
@@ -244,22 +183,27 @@ public class CircleViewPager extends FrameLayout {
             //  设置小圆点的背景为暗红图片
             imageViewDot.setBackgroundResource(mDarkDotRes);
             mLinearLayoutDot.addView(imageViewDot);
-            mImageViewDotList.add(imageViewDot);
+            mIvDotList.add(imageViewDot);
         }
         //设置第一个小圆点图片背景为红色
         if (mUrlList.size() > 0) {
-            mImageViewDotList.get(dotPosition).setBackgroundResource(mLightDotRes);
+            mIvDotList.get(dotPosition).setBackgroundResource(mLightDotRes);
         }
     }
 
 
     private void setViewPager() {
-        adapter = new CirclePagerAdapter(mImageViewList,this);
-
+        CirclePagerAdapter adapter = new CirclePagerAdapter(mIvList, this);
         mViewPager.setAdapter(adapter);
-
         mViewPager.setCurrentItem(currentPosition);
-        //页面改变监听
+
+        setPageChangeListener();
+        startLoopViewPager();
+        setTouchListener();
+    }
+
+    //  ViewPager页面改变监听
+    private void setPageChangeListener() {
         mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
             @Override
             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -279,8 +223,8 @@ public class CircleViewPager extends FrameLayout {
                     dotPosition = position - 1;
                 }
                 //  把之前的小圆点设置背景为暗红,当前小圆点设置为红色
-                mImageViewDotList.get(prePosition).setBackgroundResource(mDarkDotRes);
-                mImageViewDotList.get(dotPosition).setBackgroundResource(mLightDotRes);
+                mIvDotList.get(prePosition).setBackgroundResource(mDarkDotRes);
+                mIvDotList.get(dotPosition).setBackgroundResource(mLightDotRes);
                 prePosition = dotPosition;
             }
 
@@ -294,49 +238,30 @@ public class CircleViewPager extends FrameLayout {
         });
     }
 
-    public interface OnPageClickListener{
+    public interface OnPageClickListener {
         void pageClickListener(int position);
     }
 
-    public void imageClick(int position){
+    //  adapter中图片点击的回掉方法
+    public void imageClick(int position) {
         mOnPageClickListener.pageClickListener(position);
     }
 
-    public float getDotWidth() {
-        return mDotWidth;
-    }
 
     public void setDotWidth(float dotWidth) {
         mDotWidth = ScreenUtils.dp2px(getContext(), dotWidth);
     }
 
-    public int getLightDotRes() {
-        return mLightDotRes;
-    }
-
-    public void setLightDotRes(int lightDotRes) {
+    public void setLightDotRes(@DrawableRes int lightDotRes) {
         mLightDotRes = lightDotRes;
     }
 
-    public int getDarkDotRes() {
-        return mDarkDotRes;
-    }
-
-    public void setDarkDotRes(int darkDotRes) {
+    public void setDarkDotRes(@DrawableRes int darkDotRes) {
         mDarkDotRes = darkDotRes;
     }
 
-    public int[] getImages() {
-        return images;
-    }
-
-    public void setImages(int[] images) {
-        this.images = images;
-        invalidate();
-    }
-
-    public void setOnPageClickListener(OnPageClickListener onPageClickListener){
-        this.mOnPageClickListener=onPageClickListener;
+    public void setOnPageClickListener(OnPageClickListener onPageClickListener) {
+        this.mOnPageClickListener = onPageClickListener;
     }
 
     public void setInterval(int interval) {

BIN
viewpager/src/main/res/drawable/red_dot.png


BIN
viewpager/src/main/res/drawable/red_dot_night.png


+ 24 - 0
viewpager/src/main/res/layout/view_pager_layout.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <android.support.v4.view.ViewPager
+            android:id="@+id/vp_main"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+        <LinearLayout
+            android:id="@+id/ll_main_dot"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignBottom="@id/vp_main"
+            android:layout_marginBottom="10dp"
+            android:gravity="center_horizontal"
+            android:orientation="horizontal"/>
+    </RelativeLayout>
+</LinearLayout>

+ 10 - 0
viewpager/src/main/res/values/attrs.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="MyViewPager">
+        <attr name="lightDotRes" format="reference"/>
+        <attr name="darkDotRes" format="reference"/>
+        <attr name="dotWidth" format="dimension"/>
+        <attr name="interval" format="integer"/>
+
+    </declare-styleable>
+</resources>

+ 3 - 0
viewpager/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">ViewPager</string>
+</resources>

+ 17 - 0
viewpager/src/test/java/com/example/viewpager/ExampleUnitTest.java

@@ -0,0 +1,17 @@
+package com.example.viewpager;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}