封装好的图片滑动框架(AndroidImageSlider)
前言
广告轮播条的重要性不言而喻。在很多类型app中出场率都很高。
今天给大家介绍一个轮播图开源项目,这个项目把轮播图需要的ViewPager跟计时器做了封装,使用极其方便,支持gradle在线依赖。还封装了几种图片滑动动画。
无图无真相:

有10多种滑动动画,跟两种滚动状态。能满足大部分需求。
如何使用
首先在线依赖三个库
compile 'com.squareup.picasso:picasso:2.3.2'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.slider:library:1.1.5@aar'
Picasso是Square公司出品的一款非常优秀的开源图片加载库,是目前Android开发中超级流行的图片加载库之一。nineoldandroids也是github比较有名的开源动画库,我们这个图片滑动动画就是基于这个动画库。slider就是Banner开源库了。基于前面的Picasso跟nineoldandroids才达到效果。
需要在AndroidManifest.xml中加入访问网络权限。毕竟图片有可能给一个url在线显示。
<uses-permission android:name="android.permission.INTERNET" />
activity_main.xml 首页布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<com.daimajia.slider.library.SliderLayout
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="200dp"
custom:auto_cycle="true"
custom:indicator_visibility="visible"
custom:pager_animation="Accordion"
custom:pager_animation_span="1100" />
<com.daimajia.slider.library.Indicators.PagerIndicator
android:id="@+id/custom_indicator2"
style="@style/AndroidImageSlider_Corner_Oval_Orange"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp" />
</RelativeLayout>
</RelativeLayout>
最外层是RelativeLayout,里面嵌套一个RelativeLayout,设置高度200dp,这个也就是我们广告Banner的高度,里面有两个控件SliderLayout跟PagerIndicator。PagerIndicator负责Banner。PagerIndicator是指示器,表示当前选中的状态。
MainActivity.java 首页
首先在onCreate方法中初始化控件,把描述跟图片URl放map里面。然后遍历Map,在for循环中新建每一页滑动的TextSliderView,把map的key作为图片描述,设置图片url,设置图片缩放类型等。最后调用SliderLayout的addSlider添加进去。我们还可以设置SliderLayout的滑动动画,设置指示器样式,设置图片描述显示动画,设置滚动时间,也是计时器时间,添加页面改变监听函数。
mDemoSlider = (SliderLayout)findViewById(R.id.slider);
HashMap<String,String> urlMaps = new HashMap<>();
urlMaps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
urlMaps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
urlMaps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
for(String name : urlMaps.keySet()){
TextSliderView textSliderView = new TextSliderView(this);
textSliderView
.description(name)//描述
.image(urlMaps.get(name))//image方法可以传入图片url、资源id、File
.setScaleType(BaseSliderView.ScaleType.Fit)//图片缩放类型
.setOnSliderClickListener(onSliderClickListener);//图片点击
textSliderView.bundle(new Bundle());
textSliderView.getBundle().putString("extra",name);//传入参数
mDemoSlider.addSlider(textSliderView);//添加一个滑动页面
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.Accordion);//滑动动画
// mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);//默认指示器样式
mDemoSlider.setCustomIndicator((PagerIndicator)findViewById(R.id.custom_indicator2));//自定义指示器
mDemoSlider.setCustomAnimation(new DescriptionAnimation());//设置图片描述显示动画
mDemoSlider.setDuration(4000);//设置滚动时间,也是计时器时间
mDemoSlider.addOnPageChangeListener(onPageChangeListener);
Banner的Item点击监听,也就是ViewPager的某一页点击监听。
private BaseSliderView.OnSliderClickListener onSliderClickListener=new BaseSliderView.OnSliderClickListener() {
@Override
public void onSliderClick(BaseSliderView slider) {
Toast.makeText(MainActivity.this,slider.getBundle().get("extra") + "",
Toast.LENGTH_SHORT).show();
}
};
页面改变监听,ViewPager是我们经常用到的控件。对这个回调应该很熟悉了。。不过多解释。
//页面改变监听
private ViewPagerEx.OnPageChangeListener onPageChangeListener=new ViewPagerEx.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
Log.d("ansen", "Page Changed: " + position);
}
@Override
public void onPageScrollStateChanged(int state) {}
};
滑动动画
调用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(指示器)类的自定义属性比较多,我们讲几个常用的。
custom:selected_color 选中颜色
custom:selected_drawable 选中图片
custom:selected_height 选中高度
custom:selected_padding_left 选中指示器左内边距
custom:selected_padding_right 选中指示器右内边距
custom:selected_width 选中宽度
custom:shape 指示器。。的类型,有oval跟rect两种
custom:unselected_color 未选中指示器颜色
custom:unselected_height 未选中高度
custom:unselected_padding_left 未选中指示器左内边距
custom:unselected_padding_right 未选中指示器右内边距
custom:unselected_width 未选中宽度
源码下载
我写的demo源码下载地址:
开源项目github地址
建议大家直接从开源项目作者的github下载demo,然后运行下,看看效果。我写的demo没有作者的全面,但是也能参考。
如果你想第一时间看我的后期文章,扫码关注公众号,长期推送Android开发文章、最新动态、开源项目,让你各种涨姿势。
Android开发666 - 安卓开发技术分享
扫描二维码加关注
封装好的图片滑动框架(AndroidImageSlider)的更多相关文章
- 循序渐进BootstrapVue,开发公司门户网站(4)--- 使用b-carousel-slide组件实现图片轮播以及vue-awesome-swiper实现图片滑动展示
在BootstrapVue组件库里面,提供了很多对Bootstrap同等类似的组件封装,其中图片轮播可以采用b-carousel-slide组件实现,而有一些小的图片,如客户/合作伙伴Logo或者友情 ...
- javascript效果:手风琴、轮播图、图片滑动
最近都没有更,就来几个效果充实一下. 都没有进行美化这步. 手风琴: 纯css: <!DOCTYPE html> <html lang="en"> < ...
- 介绍几个java把网页报存为图片的框架
java在图像这一块非常弱.用java实现java截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可:示例代码就不展示了,网上很多 ...
- 19个非常有用的 jQuery 图片滑动插件和教程
jQuery 是一个非常优秀的 Javascript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入精美的效果.今天 ...
- Universal-Image-Loader(UIL)图片载入框架使用简介
这个也是近期项目中使用到的第三方图片载入框架.在这里也自己总结一下,简单的介绍一些使用的方式. UIL图片载入框架特点 简单介绍: 项目地址:https://github.com/nostra13/A ...
- [Android]使用ViewPager实现图片滑动展示
在淘宝等电商的APP首页经常能看到大幅的广告位,通常有多幅经常更新的图片用于展示促销信息,如下图所示: 通常会自动滚动,也可以根据手势滑动.我没有研究过人家的APP是通过什么实现的,可能有第三方已经封 ...
- swift 异步加载图片(第三方框架ImageLoader)
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- js实现图片滑动显示效果
js实现图片滑动显示效果 今天用户提出一个需求,要实现一个滑动显示新闻列表的效果,具体就是图片新闻自动滑动显示,鼠标移上去就停止滑动,移开就继续滑动:效果如下: 第一:先用HTML和CSS实现显示,主 ...
- 推荐一款手机端的图片滑动插件iSlider
首先先放出中文官方地址 http://be-fe.github.io/iSlider/index.html 这是demo 众所周知,移动端的图片滑动插件有很多,为什么我要推荐这个iSlider呢? ...
随机推荐
- 零基础到精通Web渗透测试的学习路线
小编相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家 ...
- JavaSE二次学习之标识符和编程命名相关的内容
前段时间阿里开源了<阿里巴巴 JAVA 开发手册>,里面详细叙述了有关编程命名.sql规约.工程规约等内容,作为一个初学者,只讨论一下-编程规约-的部分. 这几天又重新回去看了看JavaS ...
- Spring详解(一)------概述
本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获. 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开 ...
- sublime text3开发python并设置快捷键
Package Control 安装方法 1.通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码: 2.Sublime T ...
- pycharm中的快捷键和简单设置
PyCharm3.x默认快捷键 PyCharm Default Keymap 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Sp ...
- Socket套接字
socket编程,熟悉吧,那到底什么是socket呢?: 我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,来供应用 ...
- 总结各种排序算法【Java实现】
一.插入类排序 1.直接插入排序 思想:将第i个插入到前i-1个中的适当位置 时间复杂度:T(n) = O(n²). 空间复杂度:S(n) = O(1). 稳定性:稳定排序. 如果碰见一个和插入元素相 ...
- 通过官网找到spring的jar包
1.官网为:https://spring.io/ 2.打开之后,点击:PROJECTS,如图所示: 3.点击第三个:SPRING FRAMEWORK,如图所示: 4.进入之后,找到features,点 ...
- input长度随输入内容动态变化 input光标定位在最右侧
<input type="text" onkeydown="this.onkeyup();" onkeyup="this.size=(this. ...
- SynchronizedMap和ConcurrentHashMap 区别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt215 SynchronizedMap和ConcurrentHashMap的深 ...