最近项目用到图片轮播,于是上网看大神们写的demo,看过之后发现以前的各位大神写的都过于复杂,没有很好的利用android源码中已经封装好的函数,造成了不必要的麻烦,我感觉可以更加简单一些。
首先说说思路,肯定是要用到ViewPager这个类,因为功能太像了,相比之下只是多了一个自动轮播,其它的功能全部一样,用定时器实现page的自动轮播。
有了思路后开始看ViewPager的源码,根据构思首先需要找到源码中页面切换的函数,找了一下,源码中正好有现成的 </span><p class="p1"><span style="font-size:18px;color:#ff6666;">arrowScroll(<span class="s1">int</span> direction)</span></p><span style="font-size:18px;">,这个函数本来是用来处理带实体方向键的左右键点击切换page,好了,就用这个函数来实现页面切换,基本上就是这样了,下面看具体代码,很简单
public class BannerView extends ViewPager {
/**
* 定时器
*/
private Timer timer;
public BannerView(Context context) {
super(context);
}
public BannerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.arg1 == 1){
//向右滑动
arrowScroll(FOCUS_RIGHT);
}
if(msg.arg1 == 2){
//回滚至第一页
setCurrentItem(0);
}
};
};
/**
* 开始自动滚动
* @param delay 等待时间
* @param period 间隔时间
*/
public synchronized void startAutoScroll(long delay, long period){
timer = new Timer();
timer.schedule(new MyTask(), delay, period);
}
/**
* 停止自动滚动
*/
public synchronized void stopAutoScroll(){
timer.cancel();
}
private class MyTask extends TimerTask {
@Override
public void run() {
scrollAction();
}
}
/**
* 自动滚动
*/
private void scrollAction(){
//获取当前页码
int pageNo = getCurrentItem();
//获取总页码
int pageCount = getAdapter().getCount() - 1;
Message msg = new Message();
if(pageNo < pageCount){
msg.arg1 = 1;
}else if(pageNo == pageCount){
msg.arg1 = 2;
}
handler.sendMessage(msg);
}
}