瀏覽代碼

增添设置指示器半径、回掉给出当前页面position以及页面size

zhpan 7 年之前
父節點
當前提交
cfed2888ed

+ 19 - 3
app/build.gradle

@@ -1,8 +1,8 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 25
-    buildToolsVersion "25.0.2"
+    compileSdkVersion 26
+    buildToolsVersion '26.0.2'
     defaultConfig {
         applicationId "com.example.zhpan.circleviewpager"
         minSdkVersion 17
@@ -17,15 +17,31 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
 }
 
+repositories {
+    flatDir {
+        dirs 'libs'
+    }
+}
+
+
 dependencies {
     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'
+    compile 'com.android.support:appcompat-v7:26.1.0'
     testCompile 'junit:junit:4.12'
     compile project(':viewpager')
+    // compile 'com.zhpan.library:viewpager:1.0.0'
     compile 'com.github.bumptech.glide:glide:3.7.0'
+   // implementation files('libs/viewpager-1.0.0.jar')
+   // compile(name: 'viewpager-1.0.0', ext: 'aar')
 }

二進制
app/libs/viewpager-1.0.0.aar


+ 4 - 3
app/src/main/java/com/example/zhpan/circleviewpager/MainActivity.java

@@ -5,9 +5,9 @@ import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.widget.Toast;
 
-import com.example.viewpager.holder.HolderCreator;
-import com.example.viewpager.holder.ViewHolder;
-import com.example.viewpager.view.CircleViewPager;
+import com.zhpan.viewpager.holder.HolderCreator;
+import com.zhpan.viewpager.holder.ViewHolder;
+import com.zhpan.viewpager.view.CircleViewPager;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -63,6 +63,7 @@ public class MainActivity extends AppCompatActivity {
         //  设置图片切换时间间隔
         mViewpager.setInterval(3000);
         mViewpager.setCanLoop(true);
+        mViewpager.setIndicatorRadius(6);
         //  设置页面点击事件
         mViewpager.setOnPageClickListener(new CircleViewPager.OnPageClickListener() {
             @Override

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

@@ -5,8 +5,9 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
+import android.widget.Toast;
 
-import com.example.viewpager.holder.ViewHolder;
+import com.zhpan.viewpager.holder.ViewHolder;
 import com.example.zhpan.circleviewpager.utils.ImageLoaderUtil;
 
 /**
@@ -19,23 +20,38 @@ public class MyViewHolder implements ViewHolder<Object> {
     private TextView mTvDescribe;
 
     @Override
-    public View createView(Context context) {
+    public View createView(Context context, int position) {
         // 返回页面布局文件
         View view = LayoutInflater.from(context).inflate(R.layout.item_view, null);
-        mImageView = (ImageView) view.findViewById(R.id.banner_image);
-        mTvDescribe= (TextView) view.findViewById(R.id.tv_describe);
+        mImageView = view.findViewById(R.id.banner_image);
+        mTvDescribe = view.findViewById(R.id.tv_describe);
         return view;
     }
 
     @Override
-    public void onBind(Context context, Object data) {
+    public void onBind(final Context context, Object data, final int position, final int size) {
         // 数据绑定
-        if (data instanceof Integer)
+        if (data instanceof Integer) {
             mImageView.setImageResource((Integer) data);
-        else if (data instanceof DataBean) {
-            DataBean dataBean= (DataBean) data;
-            ImageLoaderUtil.loadImg(mImageView, dataBean.getUrl(),R.drawable.placeholder);
+            mImageView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    Toast.makeText(context, position + "点击了"+"页面数:"+size, Toast.LENGTH_SHORT).show();
+
+                }
+            });
+        } else if (data instanceof DataBean) {
+
+            final DataBean dataBean = (DataBean) data;
+            ImageLoaderUtil.loadImg(mImageView, dataBean.getUrl(), R.drawable.placeholder);
             mTvDescribe.setText(dataBean.getDescribe());
+            mImageView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    Toast.makeText(context, position + "点击了" + dataBean.getDescribe()+"  页面数"+size, Toast.LENGTH_SHORT).show();
+
+                }
+            });
         }
     }
 }

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

@@ -6,13 +6,13 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <com.example.viewpager.view.CircleViewPager
+    <com.zhpan.viewpager.view.CircleViewPager
         android:id="@+id/viewpager"
         android:layout_width="match_parent"
         android:layout_height="150dp"
         app:interval="5000" />
 
-    <com.example.viewpager.view.CircleViewPager
+    <com.zhpan.viewpager.view.CircleViewPager
         android:id="@+id/viewpager2"
         android:layout_width="match_parent"
         android:layout_height="match_parent"

+ 8 - 2
build.gradle

@@ -3,10 +3,15 @@
 buildscript {
     repositories {
         jcenter()
+        maven {
+            url 'https://dl.bintray.com/zhpanvip/CircleViewPager/'
+        }
+        google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.2.3'
-
+        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
+        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
@@ -15,6 +20,7 @@ buildscript {
 allprojects {
     repositories {
         jcenter()
+        google()
     }
 }
 

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Mon Dec 28 10:00:20 PST 2015
+#Wed Dec 06 15:15:30 CST 2017
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

+ 76 - 4
viewpager/build.gradle

@@ -1,8 +1,11 @@
 apply plugin: 'com.android.library'
-
+apply plugin: 'com.github.dcendents.android-maven'
+apply plugin: 'com.jfrog.bintray'
+// 这个version是区分library版本的,因此当我们需要更新library时记得修改这个version
+version = "1.0.3"
 android {
-    compileSdkVersion 25
-    buildToolsVersion "25.0.3"
+    compileSdkVersion 26
+    buildToolsVersion "26.0.2"
 
     defaultConfig {
         minSdkVersion 17
@@ -26,6 +29,75 @@ dependencies {
     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'
+    compile 'com.android.support:appcompat-v7:26.1.0'
     testCompile 'junit:junit:4.12'
 }
+
+def siteUrl = 'https://github.com/zhpanvip/CircleViewPager'      // 项目的主页
+def gitUrl = 'https://github.com/zhpanvip/CircleViewPager.git'   // Git仓库的url
+group = "com.zhpan.library" // Maven Group ID for the artifact,一般填你唯一的包名
+install {
+    repositories.mavenInstaller {
+        // This generates POM.xml with proper parameters
+        pom {
+            project {
+                packaging 'aar'
+                // Add your description here
+                description 'my utils for test'
+                name 'Android Commonly used utils'  //项目描述
+                url siteUrl
+                // Set your license
+                licenses {
+                    license {
+                        name 'The Apache Software License, Version 2.0'
+                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+                    }
+                }
+                developers {
+                    developer { // 开发者信息
+                        id 'zhpan'
+                        name 'zhangpan'
+                        email 'zhpanvip@outlook.com'
+                    }
+                }
+                scm {
+                    connection gitUrl
+                    developerConnection gitUrl
+                    url siteUrl
+                }
+            }
+        }
+    }
+}
+task sourcesJar(type: Jar) {
+    from android.sourceSets.main.java.srcDirs
+    classifier = 'sources'
+}
+task javadoc(type: Javadoc) {
+    failOnError false
+}
+
+task javadocJar(type: Jar, dependsOn: javadoc) {
+    classifier = 'javadoc'
+    from javadoc.destinationDir
+}
+artifacts {
+    archives javadocJar
+    archives sourcesJar
+}
+Properties properties = new Properties()
+// 加载本地配置
+properties.load(project.rootProject.file('local.properties').newDataInputStream())
+bintray {
+    user = properties.getProperty("bintray.user")
+    key = properties.getProperty("bintray.apikey")
+    configurations = ['archives']
+    pkg {
+        repo = "CircleViewPager"  //发布到Bintray的那个仓库里,默认账户有四个库,我们这里上传到maven库
+        name = "circleviewpager"  //发布到Bintray上的项目名字
+        websiteUrl = siteUrl
+        vcsUrl = gitUrl
+        licenses = ["Apache-2.0"]
+        publish = true
+    }
+}

+ 0 - 75
viewpager/src/main/java/com/example/viewpager/adapter/CirclePagerAdapter.java

@@ -1,75 +0,0 @@
-package com.example.viewpager.adapter;
-
-import android.support.v4.view.PagerAdapter;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.example.viewpager.holder.HolderCreator;
-import com.example.viewpager.holder.ViewHolder;
-import com.example.viewpager.view.CircleViewPager;
-
-import java.util.List;
-
-/**
- * Created by zhpan on 2017/3/28.
- */
-
-public class CirclePagerAdapter<T> extends PagerAdapter {
-    private List<T> list;
-    private CircleViewPager viewPager;
-    private HolderCreator holderCreator;
-
-    public CirclePagerAdapter(List<T> list, CircleViewPager viewPager, HolderCreator holderCreator) {
-        this.list = list;
-        this.viewPager = viewPager;
-        this.holderCreator = holderCreator;
-    }
-
-    @Override
-    public int getCount() {
-        return list.size();
-    }
-
-    @Override
-    public boolean isViewFromObject(View view, Object object) {
-        return view == object;
-    }
-
-    @Override
-    public Object instantiateItem(final ViewGroup container, final int position) {
-        View view = getView(position, container);
-        container.addView(view);
-        return view;
-    }
-
-
-    //  根据图片URL创建对应的ImageView并添加到集合
-    private View getView(final int position, ViewGroup container) {
-        ViewHolder holder = holderCreator.createViewHolder();
-        if (holder == null) {
-            throw new RuntimeException("can not return a null holder");
-        }
-        View view = holder.createView(container.getContext());
-        if (list != null && list.size() > 0) {
-            holder.onBind(container.getContext(), list.get(position));
-        }
-        view.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                viewPager.imageClick(position);
-            }
-        });
-        return view;
-    }
-
-    @Override
-    public void destroyItem(ViewGroup container, int position, Object object) {
-        container.removeView((View) object);
-    }
-
-    @Override
-    public void finishUpdate(ViewGroup container) {
-        super.finishUpdate(container);
-
-    }
-}

+ 0 - 17
viewpager/src/main/java/com/example/viewpager/holder/ViewHolder.java

@@ -1,17 +0,0 @@
-package com.example.viewpager.holder;
-
-import android.content.Context;
-import android.view.View;
-
-/**
- * Created by zhpan on 2017/10/30.
- * Description:
- */
-
-public interface ViewHolder<T> {
-    View createView(Context context);
-
-   // void onBind(Context context, int position, T data);
-
-    void onBind(Context context,T data);
-}

+ 106 - 0
viewpager/src/main/java/com/zhpan/viewpager/adapter/CirclePagerAdapter.java

@@ -0,0 +1,106 @@
+package com.zhpan.viewpager.adapter;
+
+import android.support.v4.view.PagerAdapter;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.zhpan.viewpager.holder.HolderCreator;
+import com.zhpan.viewpager.holder.ViewHolder;
+import com.zhpan.viewpager.view.CircleViewPager;
+
+import java.util.List;
+
+/**
+ * Created by zhpan on 2017/3/28.
+ */
+
+public class CirclePagerAdapter<T> extends PagerAdapter {
+    private List<T> list;
+    private CircleViewPager viewPager;
+    private HolderCreator holderCreator;
+    private boolean isCanLoop;
+
+    public boolean isCanLoop() {
+        return isCanLoop;
+    }
+
+    public void setCanLoop(boolean canLoop) {
+        isCanLoop = canLoop;
+    }
+
+    public CirclePagerAdapter(List<T> list, CircleViewPager viewPager, HolderCreator holderCreator) {
+        this.list = list;
+        this.viewPager = viewPager;
+        this.holderCreator = holderCreator;
+    }
+
+    @Override
+    public int getCount() {
+        return list.size();
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object object) {
+        return view == object;
+    }
+
+    @Override
+    public Object instantiateItem(final ViewGroup container, final int position) {
+        View view = getView(position, container);
+        container.addView(view);
+        return view;
+    }
+
+
+    //  根据图片URL创建对应的ImageView并添加到集合
+    private View getView(final int position, ViewGroup container) {
+        ViewHolder holder = holderCreator.createViewHolder();
+        if (holder == null) {
+            throw new RuntimeException("can not return a null holder");
+        }
+        View view = null;
+        if (list != null && list.size() > 0) {
+            if (isCanLoop) {
+                int size = list.size();
+                if (list.size() > 1) {
+                    size = list.size() - 2;
+                }
+                if (position == 0) {
+                    view = holder.createView(container.getContext(), list.size() - 1);
+                    holder.onBind(container.getContext(), list.get(0), list.size() - 1, size);
+                } else if (position == list.size() - 1) {
+                    view = holder.createView(container.getContext(), 0);
+                    holder.onBind(container.getContext(), list.get(list.size() - 1), 0, size);
+                } else {
+                    view = holder.createView(container.getContext(), position - 1);
+                    holder.onBind(container.getContext(), list.get(position), position - 1, size);
+                }
+            } else {
+                view = holder.createView(container.getContext(), position);
+                holder.onBind(container.getContext(), list.get(position), position, list.size());
+            }
+
+
+        }
+
+        if (view != null)
+            view.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    viewPager.imageClick(position);
+                }
+            });
+        return view;
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        container.removeView((View) object);
+    }
+
+    @Override
+    public void finishUpdate(ViewGroup container) {
+        super.finishUpdate(container);
+
+    }
+}

+ 1 - 1
viewpager/src/main/java/com/example/viewpager/holder/HolderCreator.java → viewpager/src/main/java/com/zhpan/viewpager/holder/HolderCreator.java

@@ -1,4 +1,4 @@
-package com.example.viewpager.holder;
+package com.zhpan.viewpager.holder;
 
 /**
  * Created by zhpan on 2017/10/30.

+ 21 - 0
viewpager/src/main/java/com/zhpan/viewpager/holder/ViewHolder.java

@@ -0,0 +1,21 @@
+package com.zhpan.viewpager.holder;
+
+import android.content.Context;
+import android.view.View;
+
+/**
+ * Created by zhpan on 2017/10/30.
+ * Description:
+ */
+
+public interface ViewHolder<T> {
+    View createView(Context context,int position);
+   // void onBind(Context context, int position, T data);
+    /**
+     * @param context context
+     * @param data 实体类对象
+     * @param position 当前位置
+     * @param size 页面个数
+     */
+    void onBind(Context context,T data,int position,int size);
+}

+ 1 - 1
viewpager/src/main/java/com/example/viewpager/utils/DensityUtils.java → viewpager/src/main/java/com/zhpan/viewpager/utils/DensityUtils.java

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

+ 18 - 9
viewpager/src/main/java/com/example/viewpager/view/CircleViewPager.java → viewpager/src/main/java/com/zhpan/viewpager/view/CircleViewPager.java

@@ -1,6 +1,5 @@
-package com.example.viewpager.view;
+package com.zhpan.viewpager.view;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Color;
@@ -16,10 +15,10 @@ import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 
 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.DensityUtils;
+import com.zhpan.viewpager.adapter.CirclePagerAdapter;
+import com.zhpan.viewpager.holder.HolderCreator;
+import com.zhpan.viewpager.holder.ViewHolder;
+import com.zhpan.viewpager.utils.DensityUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -50,14 +49,14 @@ public class CircleViewPager<T> extends FrameLayout {
     private boolean isCanLoop;
 
 
+
     //  是否显示指示器圆点
     private boolean showIndicator = true;
     private boolean isAutoPlay = false;
     private View mView;
-
-
     private int indicatorNormalColor;
     private int indicatorCheckedColor;
+    private float indicatorRadius;
 
     private LinearLayout mLlDot;
     private HolderCreator holderCreator;
@@ -118,6 +117,7 @@ public class CircleViewPager<T> extends FrameLayout {
             indicatorNormalColor = typedArray.getColor(R.styleable.CircleViewPager_indicator_normal_color, Color.parseColor("#935656"));
             typedArray.recycle();
         }
+        indicatorRadius=DensityUtils.dp2px(getContext(),4);
         mView = LayoutInflater.from(getContext()).inflate(R.layout.view_pager_layout, this);
         mLlDot = (LinearLayout) mView.findViewById(R.id.ll_main_dot);
         mViewPager = (ViewPager) mView.findViewById(R.id.vp_main);
@@ -215,7 +215,7 @@ public class CircleViewPager<T> extends FrameLayout {
         // mDotList.clear();
         mLlDot.removeAllViews();
         //  设置LinearLayout的子控件的宽高,这里单位是像素。
-        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) mDotWidth, (int) mDotWidth);
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) indicatorRadius*2, (int) indicatorRadius*2);
         params.rightMargin = (int) (mDotWidth / 1.5);
         if (mList.size() > 1) {
             //  for循环创建mUrlList.size()个ImageView(小圆点)
@@ -237,6 +237,7 @@ public class CircleViewPager<T> extends FrameLayout {
 
     private void setViewPager() {
         CirclePagerAdapter<T> adapter = new CirclePagerAdapter<>(mListAdd, this, holderCreator);
+        adapter.setCanLoop(isCanLoop);
         mViewPager.setAdapter(adapter);
         mViewPager.setCurrentItem(currentPosition);
 
@@ -381,4 +382,12 @@ public class CircleViewPager<T> extends FrameLayout {
         mList = list;
         mListAdd = new ArrayList<>();
     }
+
+    public float getIndicatorRadius() {
+        return indicatorRadius;
+    }
+
+    public void setIndicatorRadius(float indicatorRadius) {
+        this.indicatorRadius = DensityUtils.dp2px(getContext(),indicatorRadius);
+    }
 }

+ 3 - 3
viewpager/src/main/java/com/example/viewpager/view/DotView.java → viewpager/src/main/java/com/zhpan/viewpager/view/DotView.java

@@ -1,4 +1,4 @@
-package com.example.viewpager.view;
+package com.zhpan.viewpager.view;
 
 import android.content.Context;
 import android.graphics.Canvas;
@@ -18,7 +18,6 @@ public class DotView extends View {
     private boolean isChecked;
 
 
-
     public DotView(Context context) {
         this(context, null);
     }
@@ -41,7 +40,8 @@ public class DotView extends View {
         super.onDraw(canvas);
         int width = getWidth();
         int height = getHeight();
-        canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2, mPaint);
+        float radius = Math.min(width, height) / 2;
+        canvas.drawCircle(width / 2, height / 2, radius, mPaint);
     }
 
     public boolean isChecked() {

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

@@ -12,6 +12,7 @@
 
         <attr name="indicator_checked_color" format="color"/>
         <attr name="indicator_normal_color" format="color"/>
+        <attr name="indicator_radius" format="float"/>
 
     </declare-styleable>