自动轮播的Viewpager

来源:互联网 发布:web软件开发方式 编辑:程序博客网 时间:2024/05/16 15:36


自动轮播的Viewpager

[复制链接]
来自:MrlLee分类:Android精品源码上传时间:2016-5-31 12:14:00
Tag:Failedcommitcreatelatest修复

项目介绍:

 gradle/wrapper增加播放控制Apr 21, 2016 rollviewpager修复LooperPagerAdapter的notifyDataSetChange时的BUG。以及页数为1时的BUG。May 24, 2016 rollviewpagerdome修复LooperPagerAdapter的notifyDataSetChange时的BUG。以及页数为1时的BUG。May 24, 2016 .gitignorefirst createJul 13, 2015 README.md修复LooperPagerAdapter的notifyDataSetChange时的BUG。以及页数为1时的BUG。May 24, 2016 README_en.md修复LooperPagerAdapter的notifyDataSetChange时的BUG。以及页数为1时的BUG。May 24, 2016 build.gradle降低SDk版本要求May 13, 2016 example.jpg修改图片大小Jul 17, 2015 gradle.propertiesfirst createJul 13, 2015 gradlewfirst createJul 13, 2015 gradlew.batfirst createJul 13, 2015 settings.gradle修改部分不和谐代码Jul 15, 2015

本帖隐藏的内容

RollViewPager


自动轮播的Viewpager



支持无限循环。
触摸时会暂停播放,直到结束触摸一个延迟周期以后继续播放。
看起来就像这样。指示器可以为点可以为数字还可以自定义,位置也可以变。

example



依赖



[Java] 查看源文件 复制代码
?
1
compile'com.jude:rollviewpager:1.3.1'



使用



[Java] 查看源文件 复制代码
?
1
2
<com.jude.rollviewpager.rollpagerview android:layout_width="\"match_parent\"" android:layout_height="\"180dp\"" app:rollviewpager_play_delay="\"3000\"/">
</com.jude.rollviewpager.rollpagerview>


[Java] 查看源文件 复制代码
?
1
app:rollviewpager_play_delay=\"3000\"
播放间隔时间,单位ms。填0则不播放。默认为0 
[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_gravity=\"center\"
指示器位置,提供
[Java] 查看源文件 复制代码
?
1
left
,
[Java] 查看源文件 复制代码
?
1
center
,
[Java] 查看源文件 复制代码
?
1
right
。默认
[Java] 查看源文件 复制代码
?
1
center


[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_color=\"#7c7c7c\"
指示器背景颜色.默认黑色

[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_alpha
="80" 指示器背景透明度。0全透明,255不透明。默认0.

[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_paddingLeft
="16dp" 指示器左边距

[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_paddingRight
="16dp" 指示器右边距

[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_paddingTop
="16dp" 指示器上边距

[Java] 查看源文件 复制代码
?
1
app:rollviewpager_hint_paddingBottom
="16dp" 指示器下边距

一般指定一下间隔时间就好了。



HintView



提供了HintView是对指示器进行自定义。

[Java] 查看源文件 复制代码
?
1
setHintView(HintView hintview)




  • HintView



    • ShapeHintView



      • IconHintView

      • ColorPointHintView


    • TextHintView




用法:



[Java] 查看源文件 复制代码
?
1
2
3
4
mRollViewPager.setHintView(new IconHintView(this,R.drawable.point_focus,R.drawable.point_normal));
mRollViewPager.setHintView(new ColorPointHintView(this, Color.YELLOW,Color.WHITE));
mRollViewPager.setHintView(new TextHintView(this));
mRollViewPager.setHintView(null);//隐藏指示器


Adapter



提供以下三种种方便的PagerAdapter供使用。

本ViewPager也可以使用其他任意PagerAdapter。



StaticPagerAdapter



存储页面的Adapter。view添加进去就存储不会再次

[Java] 查看源文件 复制代码
?
1
getView
,减少页面创建消耗,消耗内存。一般自动播放的情况这种方案比较好。不然会大量构造View。
概念参照FragmentPagerAdapter。可以用于其他ViewPager。



DynamicPagerAdapter



动态的Adapter。当创建3号view时会销毁1号view(递推),会时常调用

[Java] 查看源文件 复制代码
?
1
getView
。增加页面创建消耗,减小内存消耗。
概念参照FragmentStatePagerAdapter。可以用于其他ViewPager。



[Java] 查看源文件 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//2种Adapter用法一样。
mRollViewPager.setAdapter(new TestNomalAdapter());
private class TestNomalAdapter extends StaticPagerAdapter{
    private int[] imgs = {
            R.drawable.img1,
            R.drawable.img2,
            R.drawable.img3,
            R.drawable.img4,
    };
 
 
    @Override
    public View getView(ViewGroup container, int position) {
        ImageView view = new ImageView(container.getContext());
        view.setImageResource(imgs[position]);
        view.setScaleType(ImageView.ScaleType.CENTER_CROP);
        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        return view;
    }
 
 
    @Override
    public int getCount() {
        return imgs.length;
    }
}


LoopPagerAdapter



无限循环的Adapter。无限循环上采用的是getCount返回int大数的方法(并没有什么缺点,另外估计1s的间隔时间你在有生之年看不到他播放到底)。实测比N<->1的效果好。

数据采用StaticPagerAdapter的方案。节省创建View开销。
本Adapter只能用于本RollViewPager;

无需其他设置,很简单。



[Java] 查看源文件 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mRollViewPager.setAdapter(new TestLoopAdapter(mRollViewPager));
private class TestLoopAdapter extends LoopPagerAdapter{
    private int[] imgs = {
            R.drawable.img1,
            R.drawable.img2,
            R.drawable.img3,
            R.drawable.img4,
    };
    public TestLoopAdapter(RollPagerView viewPager) {
        super(viewPager);
    }
    @Override
    public View getView(ViewGroup container, int position) {
        ImageView view = new ImageView(container.getContext());
        view.setImageResource(imgs[position]);
        view.setScaleType(ImageView.ScaleType.CENTER_CROP);
        view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        return view;
    }
    @Override
    public int getRealCount() {
        return imgs.length;
    }
}


播放控制



[Java] 查看源文件 复制代码
?
1
2
3
rollViewPager.pause()//暂停
rollViewPager.resume()//恢复
rollViewPager.isPlaying()//是否正在播放
Demo下载地址:http://download.csdn.net/detail/sinat_28238111/9876360