广告轮播java_超简单,RxJava+ViewPager实现无限轮播广告条

先简单的聊一下ViewPager,默认它是会加载当前显示页和左右两侧的页面内容的。(所以一般使用ViewPager+Fragment的时候,尽量可以实现Fragment的懒加载,所以在这里给大家推荐一个框架Fragmention,反正我是看完这个代码感觉给自己打开了一个新天地),当然,刚才说的和本节内容一点关系也没有。

一般每一个APP上 基本都会有这么一个广告条。既然是广告条了,那就得有无限轮播的功能吧。而且我看当前还有很多人再用handler+timer在指定时间去切换线程。这样不太好吧。代码逻辑教乱。既然学了Rx当然要使用Rx来对这个事件进行操作了。而且看起来是那么简单。

我先贴Adapter的部分代码

@Override

public int getCount() {

//因为是无限轮播嘛,所以在总数量这里,欺骗一下Adapter

return Integer.MAX_VALUE;

}

同样,因为我们改变了count,所以对应的position也是从0- Integer.MAX_VALUE了

@Override

public Object instantiateItem(ViewGroup container, int position) {

View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.test,container,false);

//一般我会在这里判断一下position,因为我一般是先加载布局,数据用的是一个空集合

//当我真正从服务器中拿到数据之后,我会更新一下Adaper,所以当是空数据,就不处理了

if(lists.size() == 0){

return view;

}

//当从服务器获取到数据以后,开始循环,position对size取余可以得到0-size

position %= lists.size();

TextView tv = (TextView) view.findViewById(R.id.tv);

tv.setText(lists.get(position).getText());

container.addView(view);

return view;

}

至此,Adaper需要注意的地方就结束了。

先看一下这两个方法

//注册Rx事件,interval这个操作符是xx时间后做yy事

public void register(){

subscribe = Observable.interval(2, TimeUnit.SECONDS)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Action1() {

@Override

public void call(Long aLong) {

//每过两秒我就展示的ViewPager当前页的下一页

mPager.setCurrentItem(mPager.getCurrentItem()+1,true);

//如果你们不调用unRegister,你们可以看看当程序退出之后,你们的Toast打印出来的数,能打到多少

Toast.makeText(MainActivity.this, "aLong="+aLong, Toast.LENGTH_SHORT).show();

}

});}

//取消Rx事件

public void unRegister(){

if(subscribe != null && !subscribe.isUnsubscribed())

subscribe.unsubscribe();

}

我一般会在生命周期的方法里面去调用注册和取消注册的方法。比如onResume和onPause

同时,mPager最好在设置完ViewPager后就指定显示再1000页。这样用户进去就可以左滑了。

同时

mPager.setAdapter(adapter);

mPager.setCurrentItem(10000,false);

mPager.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

//监听ViewPager的触摸事件,当用户按下的时候取消注册,当用户手抬起的时候再注册,这样效果就完美了

switch (event.getAction()){

case MotionEvent.ACTION_DOWN:

unRegister();

break;

case MotionEvent.ACTION_UP:

register();

break;

}

return false;

}});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值