├── .gitattributes ├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── soubw │ │ └── wxj │ │ ├── BannerActivity.java │ │ ├── FullActivity.java │ │ └── MainActivity.java │ └── res │ ├── layout │ ├── banner_activity.xml │ └── main_activity.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jgallery ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── soubw │ │ ├── cache │ │ ├── ACache.java │ │ └── JCache.java │ │ ├── config │ │ └── JConfig.java │ │ ├── jgallery │ │ ├── JGallery.java │ │ ├── JGalleryPagerAdapter.java │ │ ├── JGalleryRecycleAdapter.java │ │ ├── JGalleryScroller.java │ │ ├── config │ │ │ ├── DataType.java │ │ │ ├── IndicatorGravity.java │ │ │ ├── IndicatorStyle.java │ │ │ └── PageTransformer.java │ │ ├── listener │ │ │ ├── OnJGalleryClickListener.java │ │ │ ├── OnJGalleryLoadListener.java │ │ │ ├── OnJGalleryLongClickListener.java │ │ │ └── OnJGalleryPageSelectedListener.java │ │ └── transformer │ │ │ ├── ABaseTransformer.java │ │ │ ├── AccordionTransformer.java │ │ │ ├── BackgroundToForegroundTransformer.java │ │ │ ├── CubeInTransformer.java │ │ │ ├── CubeOutTransformer.java │ │ │ ├── DefaultTransformer.java │ │ │ ├── DepthPageTransformer.java │ │ │ ├── FlipHorizontalTransformer.java │ │ │ ├── FlipVerticalTransformer.java │ │ │ ├── ForegroundToBackgroundTransformer.java │ │ │ ├── RotateDownTransformer.java │ │ │ ├── RotateUpTransformer.java │ │ │ ├── ScaleInOutTransformer.java │ │ │ ├── StackTransformer.java │ │ │ ├── TabletTransformer.java │ │ │ ├── ZoomInTransformer.java │ │ │ ├── ZoomOutSlideTransformer.java │ │ │ └── ZoomOutTranformer.java │ │ ├── jroundprogressbar │ │ └── JRoundProgressBar.java │ │ ├── photoview │ │ ├── Compat.java │ │ ├── DefaultOnDoubleTapListener.java │ │ ├── IPhotoView.java │ │ ├── PhotoView.java │ │ ├── PhotoViewAttacher.java │ │ ├── gestures │ │ │ ├── CupcakeGestureDetector.java │ │ │ ├── EclairGestureDetector.java │ │ │ ├── FroyoGestureDetector.java │ │ │ ├── GestureDetector.java │ │ │ ├── OnGestureListener.java │ │ │ └── VersionedGestureDetector.java │ │ ├── log │ │ │ ├── LogManager.java │ │ │ ├── Logger.java │ │ │ └── LoggerDefault.java │ │ └── scrollerproxy │ │ │ ├── GingerScroller.java │ │ │ ├── IcsScroller.java │ │ │ ├── PreGingerScroller.java │ │ │ └── ScrollerProxy.java │ │ ├── salvage │ │ ├── RecycleBin.java │ │ └── RecyclingPagerAdapter.java │ │ ├── utils │ │ ├── JFile.java │ │ ├── JMD5.java │ │ ├── JViewShot.java │ │ └── OkHttpProgress.java │ │ └── view │ │ ├── BaseGestureDetector.java │ │ ├── JImageView.java │ │ ├── JVideoView.java │ │ ├── JView.java │ │ ├── LargeImageView.java │ │ └── MoveGestureDetector.java │ └── res │ ├── drawable │ ├── jgallery_bg.jpg │ ├── jgallery_image_over.png │ ├── jgallery_num_indicator.xml │ ├── jgallery_play_video.png │ └── jgallery_video_over.png │ ├── layout │ ├── jgallery.xml │ ├── jgallery_item.xml │ ├── jimageview.xml │ └── jvideoview.xml │ └── values │ ├── jgallery_attr.xml │ ├── jroundprogressbar_attr.xml │ └── strings.xml ├── screenshots ├── 0.gif ├── 1.gif ├── 2.gif └── 3.gif └── settings.gradle /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Android 广告(banner)图片轮播、图片浏览、仿微信大图查看控件(支持视频和gif图片)、支持动态添加数据 2 | 3 | 4 | 引入依赖库 5 | ``` 6 | compile 'com.soubw:jgallery:1.0.2’ 7 | ``` 8 | 9 | 10 | ![image](https://github.com/WX-JIN/JGallery/blob/master/screenshots/0.gif) 11 | 12 | ![image](https://github.com/WX-JIN/JGallery/blob/master/screenshots/1.gif) 13 | 14 | ![image](https://github.com/WX-JIN/JGallery/blob/master/screenshots/2.gif) 15 | 16 | ![image](https://github.com/WX-JIN/JGallery/blob/master/screenshots/3.gif) 17 | 18 | 19 | ---------- 20 | 各位之前先使用compile 'com.soubw:jgallery:1.0.2’,第二版重构中 21 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | 7 | defaultConfig { 8 | applicationId "com.soubw.wxj" 9 | minSdkVersion 16 10 | targetSdkVersion 25 11 | versionCode 1 12 | versionName "1.0" 13 | vectorDrawables.useSupportLibrary = true 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | } 22 | 23 | dependencies { 24 | compile fileTree(include: ['*.jar'], dir: 'libs') 25 | compile project(':jgallery') 26 | } 27 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/soubw/wxj/BannerActivity.java: -------------------------------------------------------------------------------- 1 | package com.soubw.wxj; 2 | 3 | import android.os.Bundle; 4 | import android.os.Environment; 5 | import android.os.Handler; 6 | import android.support.v4.app.FragmentActivity; 7 | import android.view.View; 8 | 9 | import com.soubw.jgallery.JGallery; 10 | import com.soubw.jgallery.config.DataType; 11 | import com.soubw.jgallery.config.PageTransformer; 12 | import com.soubw.jgallery.listener.OnJGalleryClickListener; 13 | 14 | /** 15 | * author: WX_JIN 16 | * email: wangxiaojin@soubw.com 17 | */ 18 | public class BannerActivity extends FragmentActivity { 19 | private com.soubw.jgallery.JGallery jGallery; 20 | 21 | private Handler handler = new Handler(); 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.banner_activity); 27 | this.jGallery = (JGallery) findViewById(R.id.jGallery); 28 | // List list = new ArrayList(); 29 | // list.add("http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/1.jpg"); 30 | // list.add("http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/2.jpg"); 31 | // list.add("http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/1.jpg"); 32 | // list.add("http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/3.jpg"); 33 | // list.add("http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/4.jpg"); 34 | 35 | 36 | final String[] list = new String[]{ 37 | "http://img2.ph.126.net/S5yjVLz4t7k7fTl0D7hPLw==/6630852261420005987.jpg", 38 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/2.jpg", 39 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/3.jpg", 40 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/4.jpg" 41 | }; 42 | 43 | final String[] list1 = new String[]{ 44 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/gif/list/1.gif", 45 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/gif/list/2.gif", 46 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/gif/list/3.gif", 47 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/gif/list/4.gif", 48 | "http://7xllxs.com1.z0.glb.clouddn.com/common/video/mp4/1.mp4" 49 | ,"http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/1.jpg", 50 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/2.jpg", 51 | Environment.getExternalStorageDirectory().getPath()+"/test", 52 | "http://7xllxs.com1.z0.glb.clouddn.com/common/pic/banner/3.jpg" 53 | }; 54 | 55 | final Object[] type = new Object[]{ 56 | DataType.NORMAL_IMAGE, DataType.NORMAL_IMAGE, DataType.NORMAL_IMAGE, DataType.NORMAL_IMAGE 57 | }; 58 | 59 | final Object[] pre = new Object[]{ 60 | R.mipmap.ic_launcher,R.mipmap.ic_launcher, R.mipmap.ic_launcher,R.mipmap.ic_launcher 61 | }; 62 | 63 | final Object[] type1 = new Object[]{ 64 | DataType.GIF_IMAGE, DataType.GIF_IMAGE, DataType.GIF_IMAGE, 65 | DataType.GIF_IMAGE,DataType.NET_VIDEO, DataType.NORMAL_IMAGE, DataType.NORMAL_IMAGE, DataType.LOCAL_VIDEO,DataType.NORMAL_IMAGE 66 | 67 | }; 68 | 69 | 70 | /** 71 | * 可配置默认的默认的图片(视频或者图片的缩略图) 72 | */ 73 | final Object[] pre1 = new Object[]{ 74 | R.mipmap.ic_launcher,R.mipmap.ic_launcher, R.mipmap.ic_launcher,R.mipmap.ic_launcher, R.mipmap.ic_launcher, 75 | R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher 76 | 77 | }; 78 | 79 | this.jGallery.setData(list1,type1,pre1); 80 | this.jGallery.setPageTransformer(PageTransformer.Default); 81 | this.jGallery.setOnJGalleryClickListener(new OnJGalleryClickListener() { 82 | @Override 83 | public void OnClick(View view, int position) { 84 | //todo 85 | } 86 | }); 87 | handler.postDelayed(new Runnable() { 88 | @Override 89 | public void run() { 90 | jGallery.addBeforeData(list,type,pre); 91 | } 92 | },3000); 93 | 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /app/src/main/java/com/soubw/wxj/FullActivity.java: -------------------------------------------------------------------------------- 1 | package com.soubw.wxj; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.FragmentActivity; 5 | 6 | import com.soubw.jgallery.JGallery; 7 | import com.soubw.jgallery.config.PageTransformer; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * author: WX_JIN 14 | * email: wangxiaojin@soubw.com 15 | */ 16 | public class FullActivity extends FragmentActivity { 17 | 18 | private JGallery jGallery; 19 | 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | jGallery = new JGallery(this); 25 | setContentView(jGallery); 26 | List list = new ArrayList(); 27 | list.add("http://img.hb.aicdn.com/2f9f2dbb8e4a3c5356d1a68d028200dafba6999c11ed5-y06Nn9_fw658"); 28 | list.add("http://img2.ph.126.net/W_ARfKat8Kd980IaCadAfA==/6630180459815284013.jpg"); 29 | list.add("https://file.tapd.cn/20091511/attachments/bug_download/1120091511001021524/bug"); 30 | list.add("http://img0.ph.126.net/KYhtqy2CjGE7PPqwsa4UjQ==/6630928127722322679.jpg"); 31 | list.add("http://img.hb.aicdn.com/f95cd52b24c3cd5718900a8661e7d753ce44b37e179504-6TO3FP_fw658"); 32 | list.add("http://ww2.sinaimg.cn/mw690/92077a4bgw1f5q72gjc6wj20qo140n7v.jpg"); 33 | list.add("hhttp://7xpb9x.com1.z0.glb.clouddn.com/2017/01/20/b578e4755a32ac56a9c4b9a1f7e2822d.jpg"); 34 | list.add("http://img.hb.aicdn.com/ea8ee7955be7e1ff706a4b72bb1c22012f2356461666d-yPnDC6_fw658"); 35 | 36 | 37 | // 38 | /** 39 | * 添加数据 40 | * param1 图片或者视频url 41 | * param2 图片或者视频类型 42 | * param3 图片或者视频缩略图或者默认图 43 | */ 44 | this.jGallery.setData(list); 45 | 46 | /** 47 | * 设置默认背景图 48 | */ 49 | this.jGallery.setDefaultImage(R.mipmap.ic_launcher); 50 | 51 | /** 52 | * 设置切换图片风格 53 | */ 54 | this.jGallery.setPageTransformer(PageTransformer.ScaleInOut); 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/soubw/wxj/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.soubw.wxj; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | 8 | /** 9 | * author:WX_JIN 10 | * email:wangxiaojin@soubw.com 11 | * link: http://soubw.com 12 | */ 13 | public class MainActivity extends AppCompatActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.main_activity); 19 | } 20 | 21 | public void btnBanner(View view){ 22 | startActivity(new Intent(this,BannerActivity.class)); 23 | } 24 | 25 | public void btnFull(View view){ 26 | startActivity(new Intent(this,FullActivity.class)); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/banner_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/main_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 |