前言

广告轮播条的重要性不言而喻。在很多类型app中出场率都很高。

今天给大家介绍一个轮播图开源项目,这个项目把轮播图需要的ViewPager跟计时器做了封装,使用极其方便,支持gradle在线依赖。还封装了几种图片滑动动画。

无图无真相:

有10多种滑动动画,跟两种滚动状态。能满足大部分需求。

如何使用

首先在线依赖三个库

  1. compile 'com.squareup.picasso:picasso:2.3.2'
  2. compile 'com.nineoldandroids:library:2.4.0'
  3. compile 'com.daimajia.slider:library:1.1.5@aar'

Picasso是Square公司出品的一款非常优秀的开源图片加载库,是目前Android开发中超级流行的图片加载库之一。nineoldandroids也是github比较有名的开源动画库,我们这个图片滑动动画就是基于这个动画库。slider就是Banner开源库了。基于前面的Picasso跟nineoldandroids才达到效果。

需要在AndroidManifest.xml中加入访问网络权限。毕竟图片有可能给一个url在线显示。

  1. <uses-permission android:name="android.permission.INTERNET" />

activity_main.xml 首页布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:custom="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <RelativeLayout
  7. android:layout_width="match_parent"
  8. android:layout_height="200dp">
  9. <com.daimajia.slider.library.SliderLayout
  10. android:id="@+id/slider"
  11. android:layout_width="match_parent"
  12. android:layout_height="200dp"
  13. custom:auto_cycle="true"
  14. custom:indicator_visibility="visible"
  15. custom:pager_animation="Accordion"
  16. custom:pager_animation_span="1100" />
  17. <com.daimajia.slider.library.Indicators.PagerIndicator
  18. android:id="@+id/custom_indicator2"
  19. style="@style/AndroidImageSlider_Corner_Oval_Orange"
  20. android:layout_alignParentBottom="true"
  21. android:layout_centerHorizontal="true"
  22. android:layout_marginBottom="20dp" />
  23. </RelativeLayout>
  24. </RelativeLayout>

最外层是RelativeLayout,里面嵌套一个RelativeLayout,设置高度200dp,这个也就是我们广告Banner的高度,里面有两个控件SliderLayout跟PagerIndicator。PagerIndicator负责Banner。PagerIndicator是指示器,表示当前选中的状态。

MainActivity.java 首页

首先在onCreate方法中初始化控件,把描述跟图片URl放map里面。然后遍历Map,在for循环中新建每一页滑动的TextSliderView,把map的key作为图片描述,设置图片url,设置图片缩放类型等。最后调用SliderLayout的addSlider添加进去。我们还可以设置SliderLayout的滑动动画,设置指示器样式,设置图片描述显示动画,设置滚动时间,也是计时器时间,添加页面改变监听函数。

  1. mDemoSlider = (SliderLayout)findViewById(R.id.slider);
  2. HashMap<String,String> urlMaps = new HashMap<>();
  3. urlMaps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
  4. urlMaps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
  5. urlMaps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
  6. for(String name : urlMaps.keySet()){
  7. TextSliderView textSliderView = new TextSliderView(this);
  8. textSliderView
  9. .description(name)//描述
  10. .image(urlMaps.get(name))//image方法可以传入图片url、资源id、File
  11. .setScaleType(BaseSliderView.ScaleType.Fit)//图片缩放类型
  12. .setOnSliderClickListener(onSliderClickListener);//图片点击
  13. textSliderView.bundle(new Bundle());
  14. textSliderView.getBundle().putString("extra",name);//传入参数
  15. mDemoSlider.addSlider(textSliderView);//添加一个滑动页面
  16. }
  17. mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);//滑动动画
  18. // mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);//默认指示器样式
  19. mDemoSlider.setCustomIndicator((PagerIndicator)findViewById(R.id.custom_indicator2));//自定义指示器
  20. mDemoSlider.setCustomAnimation(new DescriptionAnimation());//设置图片描述显示动画
  21. mDemoSlider.setDuration(4000);//设置滚动时间,也是计时器时间
  22. mDemoSlider.addOnPageChangeListener(onPageChangeListener);

Banner的Item点击监听,也就是ViewPager的某一页点击监听。

  1. private BaseSliderView.OnSliderClickListener onSliderClickListener=new BaseSliderView.OnSliderClickListener() {
  2. @Override
  3. public void onSliderClick(BaseSliderView slider) {
  4. Toast.makeText(MainActivity.this,slider.getBundle().get("extra") + "",
  5. Toast.LENGTH_SHORT).show();
  6. }
  7. };

页面改变监听,ViewPager是我们经常用到的控件。对这个回调应该很熟悉了。。不过多解释。

  1. //页面改变监听
  2. private ViewPagerEx.OnPageChangeListener onPageChangeListener=new ViewPagerEx.OnPageChangeListener() {
  3. @Override
  4. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
  5. @Override
  6. public void onPageSelected(int position) {
  7. Log.d("ansen", "Page Changed: " + position);
  8. }
  9. @Override
  10. public void onPageScrollStateChanged(int state) {}
  11. };

滑动动画

调用SliderLayout的setPresetTransformer可以设置滑动动画,这个方法传入的是一个Transformer对象。这个对象是一个枚举类型,有以下值:

  • Transformer.Default 默认
  • Transformer.Accordion
  • Transformer.Background2Foreground
  • Transformer.CubeIn
  • Transformer.DepthPage
  • Transformer.Fade
  • Transformer.FlipHorizontal
  • Transformer.FlipPage
  • Transformer.Foreground2Background
  • Transformer.RotateDown
  • Transformer.RotateUp
  • Transformer.Stack
  • Transformer.Tablet
  • Transformer.ZoomIn
  • Transformer.ZoomOutSlide
  • Transformer.ZoomOut

大家可以设置不同的值看看什么样的效果,也可以下载作者github的demo,文章末尾我会贴出这个项目的github地址。

设置图片描述显示时动画

  • setCustomAnimation(new DescriptionAnimation()); 描述默认动画
  • setCustomAnimation(new ChildAnimationExample());

指示器自定义属性

PagerIndicator(指示器)类的自定义属性比较多,我们讲几个常用的。

  1. custom:selected_color 选中颜色
  2. custom:selected_drawable 选中图片
  3. custom:selected_height 选中高度
  4. custom:selected_padding_left 选中指示器左内边距
  5. custom:selected_padding_right 选中指示器右内边距
  6. custom:selected_width 选中宽度
  7. custom:shape 指示器。。的类型,有ovalrect两种
  8. custom:unselected_color 未选中指示器颜色
  9. custom:unselected_height 未选中高度
  10. custom:unselected_padding_left 未选中指示器左内边距
  11. custom:unselected_padding_right 未选中指示器右内边距
  12. custom:unselected_width 未选中宽度

源码下载

我写的demo源码下载地址:

https://github.com/ansen666/ImageSlider

开源项目github地址

https://github.com/daimajia/AndroidImageSlider

建议大家直接从开源项目作者的github下载demo,然后运行下,看看效果。我写的demo没有作者的全面,但是也能参考。

如果你想第一时间看我的后期文章,扫码关注公众号,长期推送Android开发文章、最新动态、开源项目,让你各种涨姿势。

  1. Android开发666 - 安卓开发技术分享
  2. 扫描二维码加关注

封装好的图片滑动框架(AndroidImageSlider)的更多相关文章

  1. 循序渐进BootstrapVue,开发公司门户网站(4)--- 使用b-carousel-slide组件实现图片轮播以及vue-awesome-swiper实现图片滑动展示

    在BootstrapVue组件库里面,提供了很多对Bootstrap同等类似的组件封装,其中图片轮播可以采用b-carousel-slide组件实现,而有一些小的图片,如客户/合作伙伴Logo或者友情 ...

  2. javascript效果:手风琴、轮播图、图片滑动

    最近都没有更,就来几个效果充实一下. 都没有进行美化这步. 手风琴: 纯css: <!DOCTYPE html> <html lang="en"> < ...

  3. 介绍几个java把网页报存为图片的框架

    java在图像这一块非常弱.用java实现java截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可:示例代码就不展示了,网上很多 ...

  4. 19个非常有用的 jQuery 图片滑动插件和教程

    jQuery 是一个非常优秀的 Javascript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入精美的效果.今天 ...

  5. Universal-Image-Loader(UIL)图片载入框架使用简介

    这个也是近期项目中使用到的第三方图片载入框架.在这里也自己总结一下,简单的介绍一些使用的方式. UIL图片载入框架特点 简单介绍: 项目地址:https://github.com/nostra13/A ...

  6. [Android]使用ViewPager实现图片滑动展示

    在淘宝等电商的APP首页经常能看到大幅的广告位,通常有多幅经常更新的图片用于展示促销信息,如下图所示: 通常会自动滚动,也可以根据手势滑动.我没有研究过人家的APP是通过什么实现的,可能有第三方已经封 ...

  7. swift 异步加载图片(第三方框架ImageLoader)

    import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...

  8. js实现图片滑动显示效果

    js实现图片滑动显示效果 今天用户提出一个需求,要实现一个滑动显示新闻列表的效果,具体就是图片新闻自动滑动显示,鼠标移上去就停止滑动,移开就继续滑动:效果如下: 第一:先用HTML和CSS实现显示,主 ...

  9. 推荐一款手机端的图片滑动插件iSlider

    首先先放出中文官方地址   http://be-fe.github.io/iSlider/index.html 这是demo 众所周知,移动端的图片滑动插件有很多,为什么我要推荐这个iSlider呢? ...

随机推荐

  1. [2017-08-07]ABP系列——QuickStartA:概述、思想、入门和HelloWorld

    唔,说好的文章,欠了好久,先水一篇. 本系列目录:Abp介绍和经验分享-目录 概述 先表个态:对绝大多数人来说,ABP是成熟的,足以用到生产环境的. 最适合的:业务非常复杂且不追求极致性能的(这里并不 ...

  2. 安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges

    运行环境:在自己笔记本电脑(win10)上安装测试 操作系统版本:64位win8.1 Oracle版本:64位 oracle 11g 安装oracle 成功后//以管理员身份登录oracle 在cmd ...

  3. jq获取图片的原始尺寸,自适应布局

    原理: each()遍历,width().height()获取宽高, load() 注意: 由于页面加载完了,但图片不一定加载完了,所以直接通过 $("img").width(), ...

  4. Day-6: 函数式编程

    函数式编程就是封装成一个个函数,一次调用来完成复杂任务. 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 高阶函数 高阶函数就是将函数的变量名作为参数传入,内部再对 ...

  5. setAttribute设置无效

    我发现ie浏览器中动态用setAttribute设置style属性值始终不能设置,经过一番查找发现了这篇文字 http://webcenter.hit.edu.cn/articles/2009/05- ...

  6. Java代理详解

    一.概述 代理模式是Java常用的设计模式之一,实现代理模式要求代理类和委托类(被代理的类)具有相同的方法(提供相同的服务),代理类对象自身并不实现真正的核心逻辑,而是通过调用委托类对象的相关方法来处 ...

  7. Python 进程与线程小随笔

    Process 涉及模块:multiprocessing Process p = Process() p.start() p.join() from multiprocessing import Pr ...

  8. 团队作业8——第二次项目冲刺(Beta阶段)--第三天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 学号 成员 贡献比 201421123001 廖婷婷 16% 201421123002 翁珊 16% 201421123004 ...

  9. list后台转化为JSON的方法ajax

    导入alibaba的fastJson包 后台: protected void doGet(HttpServletRequest request, HttpServletResponse respons ...

  10. 201521123016 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...