├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── LMBanners.gif ├── build.gradle ├── guide.jpeg ├── proguard-rules.pro └── src │ ├── AndroidManifest.xml │ ├── androidTest │ └── java │ │ └── com │ │ └── allure │ │ └── lmbanners │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── allure │ │ │ └── lmbanners │ │ │ ├── GuideActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── ParallaxTransformer.java │ │ │ └── adapter │ │ │ ├── LocalImgAdapter.java │ │ │ └── UrlImgAdapter.java │ └── res │ │ ├── drawable │ │ ├── button_shape.xml │ │ ├── guide_indicator_select.xml │ │ ├── guide_indicator_unselect.xml │ │ └── ic_launcher.png │ │ ├── layout │ │ ├── activity_guide.xml │ │ ├── activity_main.xml │ │ ├── content_main.xml │ │ └── item.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ ├── img3.jpg │ │ ├── img4.jpg │ │ └── img5.jpg │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── allure │ └── lmbanners │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lm_banner_library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── allure │ │ └── lbanners │ │ ├── LMBanners.java │ │ ├── adapter │ │ └── LBaseAdapter.java │ │ ├── transformer │ │ ├── AccordionPageTransformer.java │ │ ├── AlphaPageTransformer.java │ │ ├── CubePageTransformer.java │ │ ├── DefaultPageTransformer.java │ │ ├── DepthPageTransformer.java │ │ ├── FadePageTransformer.java │ │ ├── FlipPageTransformer.java │ │ ├── LMPageTransformer.java │ │ ├── RotatePageTransformer.java │ │ ├── StackPageTransformer.java │ │ ├── TransitionEffect.java │ │ ├── ZoomCenterPageTransformer.java │ │ ├── ZoomFadePageTransformer.java │ │ ├── ZoomOutPageTransformer.java │ │ ├── ZoomPageTransformer.java │ │ ├── ZoomStackPageTransformer.java │ │ └── vertical │ │ │ └── VerticalPageTransformer.java │ │ ├── utils │ │ ├── ScreenUtils.java │ │ └── ViewPagerScroller.java │ │ └── viewpager │ │ ├── CustomViewPager.java │ │ ├── HorizonVerticalViewPager.java │ │ └── MyViewPager.java │ └── res │ ├── drawable │ ├── page_indicator_select.xml │ └── page_indicator_unselect.xml │ ├── layout │ └── banner_layout.xml │ └── values │ ├── attrs.xml │ └── strings.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | LMBanners -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 14 | 26 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | Android Lint 46 | 47 | 48 | Data flow issuesJava 49 | 50 | 51 | Groovy 52 | 53 | 54 | Initialization issuesJava 55 | 56 | 57 | Java 58 | 59 | 60 | Serialization issuesJava 61 | 62 | 63 | Threading issuesGroovy 64 | 65 | 66 | Threading issuesJava 67 | 68 | 69 | 70 | 71 | Android Lint 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 93 | 94 | 95 | 96 | 97 | 1.8 98 | 99 | 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | # LMBanners 4 | ------------- 5 | 6 | 7 | #### Banners示例:   8 | ![image](https://github.com/Allure0/LMBanners/blob/master/app/LMBanners.gif) 9 | 10 | 11 | #### 引导页示例: 12 | ![image](https://github.com/Allure0/LMBanners/blob/master/app/guide.jpeg) 13 | 14 | ### 特性(可选) 15 | - 支持设置为Guide模式或者Banners模式(Guide模式记得将宽高比例设置为全屏) 16 | - 支持是否循环播放 17 | - 支持是否自动播放 18 | - 支持页面切换间隔时间 19 | - 支持两页动画过渡时间 20 | - 支持自定义原点的样式 21 | - 支持自定义原点大小(设置的宽度即为高度) 22 | - 支持多种动画过渡方式 23 | - 支持自定义动画过渡方式 24 | - 支持原点位置底部居中或者底部居右 25 | - 支持横向纵向播放(纵向暂只支持一种动画过渡) 26 | - 支持设置原点距离底部的距离 27 | 28 | 29 | ### 原理说明 30 | 项目基于ViewPager实现,ViewPager使用方式不用多说。 31 | 32 | 需求1:如何循环播放? 33 | 34 | 实现方式采用假设当前Pager总页数为X,假设页数为Y页, 35 | 首次进入处于0页,向右滑动自然没问题,向左滑时候0------1,显然不成立,此时可在finshUpdate函数中手动将第0页的下标变为X,如此我们的 36 | ViewPager即可向左滑动.但是当向右的时候呢?原理一样,当下标为X的时候,将其替换为0即可。 37 | 38 | 需求2:如何自动播放? 39 | 40 | 其实这对于稍微有点经验的人来说不算难点了,方式很多。本项目采用handler的方式,每次切换进行一次发送即可,在页面切换时记得Stop,回来 41 | 继续Start,页面销毁时进行Remove即可。 42 | 43 | 需求3:手指按住或者拖动时如何停止滑动。 44 | 45 | 本项目采用在ViewPager的dispatch进行事件分发的拦截处理。 当然也可以手动去处理Image的Ontouch事件。 46 | 47 | 48 | ### Gradle引与使用 49 | Gradle: 50 | ``` xml 51 | dependencies { 52 | compile 'com.allure0:LMBanners:1.0.9' 53 | } 54 | ``` 55 | 56 | ### 使用方法 57 | Config in xml: 58 | ``` xml 59 | 74 | 75 | ``` 76 | Config in Java: 77 | ``` xml 78 | mLBanners = (LMBanners) findViewById(R.id.banners); 79 | //设置Banners高度 80 | mLBanners.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ScreenUtils.dip2px(this, 200))); 81 | //本地用法 82 | // mLBanners.setAdapter(new LocalImgAdapter(MainActivity.this),localImages); 83 | //网络图片 84 | mLBanners.setAdapter(new UrlImgAdapter(MainActivity.this), networkImages); 85 | //参数设置 86 | mLBanners.isGuide(true);//是否为引导页 87 | mLBanners.setAutoPlay(true);//自动播放 88 | mLBanners.setVertical(false);//是否可以垂直 89 | mLBanners.setScrollDurtion(222);//两页切换时间 90 | mLBanners.setCanLoop(true);//循环播放 91 | mLBanners.setSelectIndicatorRes(R.drawable.page_indicator_select);//选中的原点 92 | mLBanners.setUnSelectUnIndicatorRes(R.drawable.page_indicator_unselect);//未选中的原点 93 | //若自定义原点到底部的距离,默认20,必须在setIndicatorWidth之前调用 94 | mLBanners.setIndicatorBottomPadding(30); 95 | mLBanners.setIndicatorWidth(5);//默认为5dp 96 | // mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Default);//选中喜欢的样式 97 | mLBanners.setHoriZontalCustomTransformer(new ParallaxTransformer(R.id.id_image));//自定义样式 98 | mLBanners.setDurtion(2000);//切换时间 99 | mLBanners.hideIndicatorLayout();//隐藏原点 100 | mLBanners.showIndicatorLayout();//显示原点 101 | mLBanners.setIndicatorPosition(LMBanners.IndicaTorPosition.BOTTOM_MID);//设置原点显示位置 102 | 103 | //停止事件,节省资源 104 | @Override 105 | protected void onPause() { 106 | super.onPause(); 107 | mLBanners.stopImageTimerTask(); 108 | } 109 | 110 | @Override 111 | protected void onResume() { 112 | super.onResume(); 113 | mLBanners.startImageTimerTask(); 114 | } 115 | 116 | @Override 117 | protected void onDestroy() { 118 | super.onDestroy(); 119 | mLBanners.clearImageTimerTask(); 120 | } 121 | 122 | /-------------Adapter-----------/ 123 | @Override 124 | public View getView(final LMBanners lBanners, final Context context, int position, String data) { 125 | View view = LayoutInflater.from(mContext).inflate(R.layout.item, null); 126 | ImageView imageView = (ImageView) view.findViewById(R.id.id_image); 127 | //可行选择喜欢的图片加载库。 128 | ImageLoader.getInstance().displayImage(data,imageView); 129 | 130 | imageView.setOnClickListener(new View.OnClickListener() { 131 | @Override 132 | public void onClick(View v) { 133 | 134 | } 135 | }); 136 | return view; 137 | } 138 | ``` 139 | 140 | 141 | ### 注意事项 142 | - 纵向播放时暂只支持一种效果(后续可能增加) 143 | - 使用纵向播放后代码不要设置setHoriZontalTransitionEffect()、setHoriZontalCustomTransformer(), XML内不要调用自定义属性horizontal_transitionEffect 144 | XML内不要调用自定义属性horizontal_transitionEffect 145 | -  若setIndicatorBottomPadding()动态代码自定义了原点距离底部的距离,需要在setIndicatorWidth()之前调用 146 | ### TODO 147 | XML内不要调用自定义属性horizontal_transitionEffect 148 | 若有BUG或者疑问,请提交Issues。者QQ群:[482906631]() 149 | 150 | ## License 151 | Copyright 2016 Allure 152 | 153 | Licensed under the Apache License, Version 2.0 (the "License"); 154 | you may not use this file except in compliance with the License. 155 | You may obtain a copy of the License at 156 | 157 | http://www.apache.org/licenses/LICENSE-2.0 158 | 159 | Unless required by applicable law or agreed to in writing, software 160 | distributed under the License is distributed on an "AS IS" BASIS, 161 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 162 | See the License for the specific language governing permissions and 163 | limitations under the License. 164 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/LMBanners.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/LMBanners.gif -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.3" 6 | defaultConfig { 7 | applicationId "com.allure.test.Lbanners" 8 | minSdkVersion 15 9 | targetSdkVersion 23 10 | versionCode 1 11 | versionName "1.0" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | lintOptions { 20 | abortOnError false 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(include: ['*.jar'], dir: 'libs') 26 | testCompile 'junit:junit:4.12' 27 | compile 'com.android.support:appcompat-v7:23.2.1' 28 | compile 'com.android.support:design:23.2.1' 29 | //选择你喜欢的图片加载库 30 | compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 31 | 32 | // 以下是引用方式 33 | compile project(':lm_banner_library') 34 | // compile 'com.allure0:LMBanners:1.0.8' 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/guide.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/guide.jpeg -------------------------------------------------------------------------------- /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 /Users/luomin/Desktop/android-sdk-macosx/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/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/allure/lmbanners/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/allure/lmbanners/GuideActivity.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners; 2 | 3 | import android.content.Intent; 4 | import android.graphics.Color; 5 | import android.os.Bundle; 6 | import android.support.annotation.Nullable; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.widget.Button; 9 | import android.widget.LinearLayout; 10 | import android.widget.Toast; 11 | 12 | import com.allure.lbanners.LMBanners; 13 | import com.allure.lbanners.transformer.TransitionEffect; 14 | import com.allure.lmbanners.adapter.LocalImgAdapter; 15 | import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; 16 | import com.nostra13.universalimageloader.core.DisplayImageOptions; 17 | import com.nostra13.universalimageloader.core.ImageLoader; 18 | import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 19 | import com.nostra13.universalimageloader.core.assist.QueueProcessingType; 20 | 21 | import java.util.ArrayList; 22 | import java.util.List; 23 | 24 | /** 25 | * 作者:luomin 26 | * 邮箱:asddavid@163.com 27 | */ 28 | 29 | public class GuideActivity extends AppCompatActivity { 30 | private LMBanners lmBanners; 31 | //本地图片 32 | private ArrayList localImages = new ArrayList(); 33 | //网络图片 34 | private List networkImages = new ArrayList<>(); 35 | private int[] mImagesSrc = { 36 | R.mipmap.img1, 37 | R.mipmap.img2, 38 | R.mipmap.img3, 39 | R.mipmap.img4, 40 | R.mipmap.img5 41 | }; 42 | @Override 43 | protected void onCreate(@Nullable Bundle savedInstanceState) { 44 | super.onCreate(savedInstanceState); 45 | setContentView(R.layout.activity_guide); 46 | initImageLoader(); 47 | addLocalImg(); 48 | addUrilImg(); 49 | initGuide(); 50 | 51 | 52 | } 53 | 54 | private void addLocalImg() { 55 | localImages.add(R.mipmap.img1); 56 | localImages.add(R.mipmap.img2); 57 | localImages.add(R.mipmap.img3); 58 | localImages.add(R.mipmap.img4); 59 | localImages.add(R.mipmap.img5); 60 | } 61 | 62 | private void addUrilImg() { 63 | networkImages.add("http://h.hiphotos.baidu.com/image/h%3D300/sign=ff62800b073b5bb5a1d726fe06d2d523/a6efce1b9d16fdfa7807474eb08f8c5494ee7b23.jpg"); 64 | networkImages.add("http://g.hiphotos.baidu.com/image/h%3D300/sign=0a9ac84f89b1cb1321693a13ed5556da/1ad5ad6eddc451dabff9af4bb2fd5266d0163206.jpg"); 65 | networkImages.add("http://a.hiphotos.baidu.com/image/h%3D300/sign=61660ec2207f9e2f6f351b082f31e962/500fd9f9d72a6059e5c05d3e2f34349b023bbac6.jpg"); 66 | networkImages.add("http://c.hiphotos.baidu.com/image/h%3D300/sign=f840688728738bd4db21b431918a876c/f7246b600c338744c90c3826570fd9f9d62aa09a.jpg"); 67 | } 68 | 69 | private void initImageLoader() { 70 | DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder(). 71 | showImageForEmptyUri(R.drawable.ic_launcher) 72 | .cacheInMemory(true).cacheOnDisk(true).build(); 73 | ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( 74 | getApplicationContext()).defaultDisplayImageOptions(defaultOptions) 75 | .threadPriority(Thread.NORM_PRIORITY - 2) 76 | .denyCacheImageMultipleSizesInMemory() 77 | .diskCacheFileNameGenerator(new Md5FileNameGenerator()) 78 | .tasksProcessingOrder(QueueProcessingType.LIFO).build(); 79 | ImageLoader.getInstance().init(config); 80 | } 81 | private void initGuide() { 82 | lmBanners = (LMBanners) findViewById(R.id.banners); 83 | lmBanners.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); 84 | lmBanners.isGuide(true); 85 | // lmBanners.setVertical(true); 86 | lmBanners.setAutoPlay(false); 87 | lmBanners.setCanLoop(false); 88 | lmBanners.setScrollDurtion(1200); 89 | lmBanners.setIndicatorBottomPadding(30); 90 | lmBanners.setIndicatorWidth(10); 91 | // lmBanners.setHoriZontalTransitionEffect(TransitionEffect.Default); 92 | lmBanners.setHoriZontalCustomTransformer(new ParallaxTransformer(R.id.id_image)); 93 | lmBanners.setIndicatorPosition(LMBanners.IndicaTorPosition.BOTTOM_MID); 94 | //本地用法 95 | lmBanners.setAdapter(new LocalImgAdapter(GuideActivity.this), localImages); 96 | 97 | /** 98 | * 若btnBgColor为-1,则表示不需要任何背景色 99 | * textColor 文字颜色 100 | * 点击事件 101 | */ 102 | // lmBanners.setOnStartListener(-1,getResources().getColor(R.color.colorAccent),****); 103 | lmBanners.setOnStartListener(R.drawable.button_shape,0XFFAACCBB,new LMBanners.onStartListener() { 104 | @Override 105 | public void startOpen() { 106 | //回调跳转的逻辑 107 | startActivity(new Intent(GuideActivity.this,MainActivity.class)); 108 | Toast.makeText(GuideActivity.this, "进入Banners", 1).show(); 109 | } 110 | }); 111 | } 112 | 113 | 114 | @Override 115 | protected void onPause() { 116 | super.onPause(); 117 | lmBanners.stopImageTimerTask(); 118 | } 119 | 120 | @Override 121 | protected void onResume() { 122 | super.onResume(); 123 | lmBanners.startImageTimerTask(); 124 | } 125 | 126 | @Override 127 | protected void onDestroy() { 128 | super.onDestroy(); 129 | lmBanners.clearImageTimerTask(); 130 | } 131 | 132 | 133 | } 134 | -------------------------------------------------------------------------------- /app/src/main/java/com/allure/lmbanners/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners; 2 | 3 | 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.AdapterView; 8 | import android.widget.ArrayAdapter; 9 | import android.widget.LinearLayout; 10 | import android.widget.ListView; 11 | import android.widget.Toast; 12 | 13 | import com.allure.lbanners.LMBanners; 14 | import com.allure.lbanners.transformer.TransitionEffect; 15 | import com.allure.lbanners.utils.ScreenUtils; 16 | import com.allure.lmbanners.adapter.LocalImgAdapter; 17 | import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; 18 | import com.nostra13.universalimageloader.core.DisplayImageOptions; 19 | import com.nostra13.universalimageloader.core.ImageLoader; 20 | import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 21 | import com.nostra13.universalimageloader.core.assist.QueueProcessingType; 22 | 23 | import java.util.ArrayList; 24 | import java.util.List; 25 | 26 | public class MainActivity extends AppCompatActivity { 27 | private LMBanners mLBanners; 28 | //本地图片 29 | private ArrayList localImages = new ArrayList(); 30 | //网络图片 31 | private List networkImages = new ArrayList<>(); 32 | private int[] mImagesSrc = { 33 | R.mipmap.img1, 34 | R.mipmap.img2, 35 | R.mipmap.img3, 36 | R.mipmap.img4, 37 | R.mipmap.img5 38 | }; 39 | 40 | private static final String[] strs = new String[]{ 41 | "defaultEffect", "alpha", "rotate", "cube", "flip", "accordion", "zoomFade", 42 | "fade", "zoomCenter", "zoomStack", "stack", "depth", "zoom", "zoomOut", "parallax" 43 | }; 44 | 45 | @Override 46 | protected void onCreate(Bundle savedInstanceState) { 47 | super.onCreate(savedInstanceState); 48 | setContentView(R.layout.activity_main); 49 | initImageLoader(); 50 | addLocalImg(); 51 | addUrilImg(); 52 | 53 | ListView listView = (ListView) findViewById(R.id.listView); 54 | listView.setAdapter(new ArrayAdapter(this, 55 | android.R.layout.simple_list_item_1, strs)); 56 | 57 | mLBanners = (LMBanners) findViewById(R.id.banners); 58 | //设置Banners高度 59 | mLBanners.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ScreenUtils.dip2px(this, 200))); 60 | 61 | 62 | //参数设置 63 | mLBanners.isGuide(false);//是否为引导页 64 | mLBanners.setAutoPlay(true);//自动播放 65 | mLBanners.setVertical(false);//是否锤子播放 66 | mLBanners.setScrollDurtion(2000);//两页切换时间 67 | mLBanners.setCanLoop(true);//循环播放 68 | mLBanners.setSelectIndicatorRes(R.drawable.guide_indicator_select);//选中的原点 69 | mLBanners.setUnSelectUnIndicatorRes(R.drawable.guide_indicator_unselect);//未选中的原点 70 | //若自定义原点到底部的距离,默认20,必须在setIndicatorWidth之前调用 71 | mLBanners.setIndicatorBottomPadding(30); 72 | mLBanners.setIndicatorWidth(10);//原点默认为5dp 73 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.ZoomStack);//选中喜欢的样式 74 | // mLBanners.setHoriZontalCustomTransformer(new ParallaxTransformer(R.id.id_image));//自定义样式 75 | mLBanners.setDurtion(3000);//轮播切换时间 76 | // mLBanners.hideIndicatorLayout();//隐藏原点 77 | // mLBanners.showIndicatorLayout();//显示原点 78 | mLBanners.setIndicatorPosition(LMBanners.IndicaTorPosition.BOTTOM_MID);//设置原点显示位置 79 | 80 | 81 | //本地用法 82 | mLBanners.setAdapter(new LocalImgAdapter(MainActivity.this), localImages); 83 | //网络图片 84 | // mLBanners.setAdapter(new UrlImgAdapter(MainActivity.this), networkImages); 85 | 86 | mLBanners.setOnStartListener(0XFFAABBCC, 0XFFAACCBB, new LMBanners.onStartListener() { 87 | @Override 88 | public void startOpen() { 89 | //回调跳转的逻辑 90 | Toast.makeText(MainActivity.this, "我要进入主界面", 1).show(); 91 | 92 | } 93 | }); 94 | 95 | listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 96 | @Override 97 | public void onItemClick(AdapterView parent, View view, int position, long id) { 98 | switch (position) { 99 | case 0: 100 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Default);//Default 101 | break; 102 | case 1: 103 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Alpha);//Alpha 104 | break; 105 | case 2: 106 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Rotate);//Rotate 107 | break; 108 | case 3: 109 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Cube);//Cube 110 | break; 111 | case 4: 112 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Flip);//Flip 113 | break; 114 | case 5: 115 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Accordion);//Accordion 116 | break; 117 | case 6: 118 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.ZoomFade);//ZoomFade 119 | break; 120 | case 7: 121 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Fade);//Fade 122 | break; 123 | case 8: 124 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.ZoomCenter);//ZoomCenter 125 | break; 126 | case 9: 127 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.ZoomStack);//ZoomStack 128 | break; 129 | case 10: 130 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Stack);//Stack 131 | break; 132 | case 11: 133 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Depth);//Depth 134 | break; 135 | case 12: 136 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.Zoom);//Zoom 137 | break; 138 | case 13: 139 | mLBanners.setHoriZontalTransitionEffect(TransitionEffect.ZoomOut);//ZoomOut 140 | break; 141 | case 14: 142 | mLBanners.setHoriZontalCustomTransformer(new ParallaxTransformer(R.id.id_image));//Parallax 143 | break; 144 | 145 | } 146 | } 147 | }); 148 | 149 | 150 | } 151 | 152 | 153 | private void addUrilImg() { 154 | networkImages.add("http://h.hiphotos.baidu.com/image/h%3D300/sign=ff62800b073b5bb5a1d726fe06d2d523/a6efce1b9d16fdfa7807474eb08f8c5494ee7b23.jpg"); 155 | networkImages.add("http://g.hiphotos.baidu.com/image/h%3D300/sign=0a9ac84f89b1cb1321693a13ed5556da/1ad5ad6eddc451dabff9af4bb2fd5266d0163206.jpg"); 156 | networkImages.add("http://a.hiphotos.baidu.com/image/h%3D300/sign=61660ec2207f9e2f6f351b082f31e962/500fd9f9d72a6059e5c05d3e2f34349b023bbac6.jpg"); 157 | networkImages.add("http://c.hiphotos.baidu.com/image/h%3D300/sign=f840688728738bd4db21b431918a876c/f7246b600c338744c90c3826570fd9f9d62aa09a.jpg"); 158 | } 159 | 160 | private void addLocalImg() { 161 | localImages.add(R.mipmap.img1); 162 | localImages.add(R.mipmap.img2); 163 | localImages.add(R.mipmap.img3); 164 | localImages.add(R.mipmap.img4); 165 | localImages.add(R.mipmap.img5); 166 | } 167 | 168 | private void initImageLoader() { 169 | DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder(). 170 | showImageForEmptyUri(R.drawable.ic_launcher) 171 | .cacheInMemory(true).cacheOnDisk(true).build(); 172 | ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( 173 | getApplicationContext()).defaultDisplayImageOptions(defaultOptions) 174 | .threadPriority(Thread.NORM_PRIORITY - 2) 175 | .denyCacheImageMultipleSizesInMemory() 176 | .diskCacheFileNameGenerator(new Md5FileNameGenerator()) 177 | .tasksProcessingOrder(QueueProcessingType.LIFO).build(); 178 | ImageLoader.getInstance().init(config); 179 | } 180 | 181 | 182 | 183 | @Override 184 | protected void onPause() { 185 | super.onPause(); 186 | mLBanners.stopImageTimerTask(); 187 | } 188 | 189 | @Override 190 | protected void onResume() { 191 | super.onResume(); 192 | mLBanners.startImageTimerTask(); 193 | } 194 | 195 | @Override 196 | protected void onDestroy() { 197 | super.onDestroy(); 198 | mLBanners.clearImageTimerTask(); 199 | } 200 | 201 | 202 | } 203 | -------------------------------------------------------------------------------- /app/src/main/java/com/allure/lmbanners/ParallaxTransformer.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners; 2 | 3 | import android.annotation.TargetApi; 4 | import android.os.Build; 5 | import android.support.v4.view.ViewPager; 6 | import android.util.Log; 7 | import android.view.View; 8 | 9 | /** 10 | * Created by luomin on 16/7/12. 11 | */ 12 | public class ParallaxTransformer implements ViewPager.PageTransformer { 13 | 14 | 15 | private int id; 16 | private int border = 0; 17 | private float speed = 0.5f; 18 | 19 | public ParallaxTransformer(int id) { 20 | this.id = id; 21 | } 22 | 23 | @TargetApi(Build.VERSION_CODES.HONEYCOMB) 24 | @Override 25 | public void transformPage(View view, float position) { 26 | 27 | View parallaxView = view.findViewById(id); 28 | 29 | if (view == null) { 30 | Log.w("ParallaxPager", "没有View"); 31 | } 32 | 33 | if (parallaxView != null && Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { 34 | if (position > -1 && position < 1) { 35 | float width = parallaxView.getWidth(); 36 | parallaxView.setTranslationX(-(position * width * speed)); 37 | float sc = ((float) view.getWidth() - border) / view.getWidth(); 38 | if (position == 0) { 39 | view.setScaleX(1); 40 | view.setScaleY(1); 41 | } else { 42 | view.setScaleX(sc); 43 | view.setScaleY(sc); 44 | } 45 | } 46 | } 47 | } 48 | 49 | public void setBorder(int px) { 50 | border = px; 51 | } 52 | 53 | public void setSpeed(float speed) { 54 | this.speed = speed; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/allure/lmbanners/adapter/LocalImgAdapter.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.widget.ImageView; 7 | 8 | import com.allure.lbanners.LMBanners; 9 | import com.allure.lbanners.adapter.LBaseAdapter; 10 | import com.allure.lmbanners.R; 11 | 12 | /** 13 | * Created by luomin on 16/7/12. 14 | */ 15 | public class LocalImgAdapter implements LBaseAdapter { 16 | private Context mContext; 17 | 18 | public LocalImgAdapter(Context context) { 19 | mContext=context; 20 | } 21 | 22 | @Override 23 | public View getView(final LMBanners lBanners, final Context context, int position, Integer data) { 24 | View view = LayoutInflater.from(mContext).inflate(R.layout.item, null); 25 | ImageView imageView = (ImageView) view.findViewById(R.id.id_image); 26 | imageView.setImageResource(data); 27 | imageView.setOnClickListener(new View.OnClickListener() { 28 | @Override 29 | public void onClick(View v) { 30 | 31 | } 32 | }); 33 | return view; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/allure/lmbanners/adapter/UrlImgAdapter.java: -------------------------------------------------------------------------------- 1 | package com.allure.lmbanners.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.widget.ImageView; 7 | 8 | import com.allure.lbanners.LMBanners; 9 | import com.allure.lbanners.adapter.LBaseAdapter; 10 | import com.allure.lmbanners.R; 11 | import com.nostra13.universalimageloader.core.ImageLoader; 12 | 13 | /** 14 | * Created by luomin on 16/7/12. 15 | */ 16 | public class UrlImgAdapter implements LBaseAdapter { 17 | private Context mContext; 18 | 19 | public UrlImgAdapter(Context context) { 20 | mContext=context; 21 | } 22 | 23 | 24 | 25 | @Override 26 | public View getView(final LMBanners lBanners, final Context context, int position, String data) { 27 | View view = LayoutInflater.from(mContext).inflate(R.layout.item, null); 28 | ImageView imageView = (ImageView) view.findViewById(R.id.id_image); 29 | ImageLoader.getInstance().displayImage(data,imageView); 30 | 31 | imageView.setOnClickListener(new View.OnClickListener() { 32 | @Override 33 | public void onClick(View v) { 34 | // MainActivity.this.startActivity(new Intent(MainActivity.this,SeconedAc.class)); 35 | } 36 | }); 37 | return view; 38 | } 39 | 40 | 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_shape.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/guide_indicator_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/guide_indicator_unselect.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_guide.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 29 | 30 | 31 | 32 | 33 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/img1.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/img2.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/img3.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/img4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/img4.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/img5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxhdpi/img5.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Allure0/LMBanners/db68534811d68ffc614175083d95166b17090f17/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | LBanners 3 | Settings 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |