史上最简单的android图片自动轮播

来源:互联网 发布:墨索里尼 黑手党 知乎 编辑:IT博客网 时间:2018/12/17 12:39
   <span style="font-size:24px;">最近项目用到图片轮播,于是上网看大神们写的demo,看过之后发现以前的各位大神写的都过于复杂,没有很好的利用android源码中已经封装好的函数,造成了不必要的麻烦,我感觉可以更加简单一些。</span>
<span style="white-space:pre"></span><span style="font-size:18px;">首先说说思路,肯定是要用到ViewPager这个类,因为功能太像了,相比之下只是多了一个自动轮播,其它的功能全部一样,用定时器实现page的自动轮播。</span>
<span style="font-size:18px;">有了思路后开始看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,好了,就用这个函数来实现页面切换,基本上就是这样了,下面看具体代码,很简单</span>
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);}}

0 0