开源一个基于ViewPager的无限轮循动画指示器
2016-05-18 10:29
363 查看
前言
在对自定义控件还模糊的时候,看到ViewPagerIndicator和android-auto-scroll-view-pager,决定自己做一个轮循效果的指示器。项目放在GitHub很久了,但一直都不完善,前段时间看到了AndroidImageSlider和CircleIndicator项目,又将自己的项目在功能性和健壮性上充实了下,目前还不支持直接从Gradle和Maven引入。项目地址:https://github.com/lightSky/InfiniteIndicator
Screenshot
Demo
Download
APK Donwload整个项目参考了一下几个项目:
android-auto-scroll-view-pager
AndroidImageSlider
CircleIndicator
Android-ViewPagerIndicator
Setting
setInterval(long)轮循的间隔时间,单位为毫秒,默认为
2500.
setDirection(int)设置Page轮循的方向, 默认是
RIGHT.
setInfinite(boolean)是否启动轮询效果,默认是开启的.
setScrollDurationFactor(double)Page的滑动速度
setStopScrollWhenTouch(boolean)是否在用户触屏时,停止滑动,默认是停止滑动
setIndicatorPosition
设置Indicator的显示位置,共7种枚举
startAutoScroll()启动轮循,间隔时间为
getInterval().
startAutoScroll(int)启动轮循,同时传入间隔时间
stopAutoScroll()停止轮循
Tip:为了防止内存泄露,及时释放资源,你应该在onPause和onResume中手动stop和start轮循
三种Indicator的枚举值
indicator_default 默认的指示器CircleIndicator
indicator_anim_circle 带动画的圆点指示器AnimCircleIndicator
indicator_anim_line is 带动画的line指示器AnimLineIndicator
后两种带动画的指示器实现方式是相同的,只是指示器的样式和动画效果不同,你可以参考AnimIndicator去自定义动画和样式,这里为了方便演示和使用,所以将它们作为枚举值独立了。
Indicator的实现方式:
CircleIndicator:不支持动画,在ViewPagerIndicator的CircleIndicator上做了些更改,支持了轮循,考虑到轮循,因此只支持Snap效果的绘制。
AnimIndicator:支持动画,参考CircleIndicator项目。
图片加载
支持从本地加载以及从网络加载图片。图片下载使用了Picasso,你也可以使用ImageLoader进行替换。但需要你自己去修改。当图片加载失败时,当前Page会被remove掉,Indicator会做相应的刷新。
当只有一条数据时,Indicator默认不显示。
使用方式
<com.lightsky.infiniteindicator.InfiniteIndicatorLayout android:id="@+id/indicator_default_circle" app:indicator_type="indicator_anim_circle" android:layout_height="wrap_content" android:layout_weight="match_parent"/>
public class MainActivity extends Activity { private InfiniteIndicatorLayout mDefaultIndicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDefaultIndicator = (InfiniteIndicatorLayout)findViewById(R.id.indicator_default_circle); HashMap<String,String> url_maps = new HashMap<String, String>(); url_maps = new HashMap<String, String>(); url_maps.put("Page A", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/a.jpg"); url_maps.put("Page B", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/b.jpg"); url_maps.put("Page C", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/c.jpg"); url_maps.put("Page D", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/d.jpg"); for(String name : url_maps.keySet()){ DefaultSliderView textSliderView = new DefaultSliderView(this); textSliderView .image(url_maps.get(name)) .setScaleType(BaseSliderView.ScaleType.Fit) .setOnSliderClickListener(this); textSliderView.getBundle() .putString("extra",name); mDefaultIndicator.addSlider(textSliderView); } mDefaultIndicator.setIndicatorPosition(InfiniteIndicatorLayout.IndicatorPosition.Center_Bottom); mDefaultIndicator.startAutoScroll(); } @Override protected void onPause() { super.onPause(); mDefaultIndicator.stopAutoScroll(); } @Override protected void onResume() { super.onResume(); mDefaultIndicator.startAutoScroll(); } }
相关文章推荐
- Error:Execution failed for task ':app:processDebugManifest'
- C++ ofstream和ifstream详细用法
- Linux常用命令(八)上机操作命令部分解答
- Linux命令之必须掌握的十条命令
- 数据库常见的三种join方式
- hdu 3440(差分约束好题)
- ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)
- Android动态加载技术三个关键问题详解
- javadoc解决中文乱码问题
- CURL 学习 1
- 判断字符数 中文 邮箱号 密码位数 手机格式 邮箱格式
- ffmpeg 命令使用
- 如何使用日期格式化函数
- jsp的七个动作指令
- 各种语言代码规范
- DNS详解
- Jquery树形插件--应用举例
- 《七天七语言》之Ruby练习1
- CSV文件工具
- 高斯消元模板