Android循环广告位是很常用的一个功能,很大一部分APP中都会使用到,之前看到过网上一些,要么实现起来很复杂,要么通用性不强,于是,决心自己写一个通用性强并且简单的,以后项目中用到直接拿过来即可!
在这里我们主要会用到ViewPager,谷歌在v4包中提供了这个类,这个类可以用于做一些页面滑动的UI,比如说APP第一次安装时的滑动翻页介绍,应用的导航功能等等。
这里还用到了第三方的一个开源控件,CirclePageIndicator,我们这里主要是用于实现广告下方的小圆点。
这里我把广告位做成了一个自定义的控件,以后可以在布局中使用,然后在代码中调用即可,非常方便!
如何自定义控件,不在这次的讨论范围之内,如果对这一方面还不了解的朋友,建议先去看看Android是如何自定义控件的。
这里先上代码:
public class CarouselView extends LinearLayout{ public CarouselView(Context context) { super(context); init(context); } public CarouselView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } @SuppressLint("NewApi") public CarouselView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } @SuppressLint("NewApi") public CarouselView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context); } private ViewPager carouselpager; private CirclePageIndicator indicator ; private ScheduledExecutorService scheduledExecutorService; private void init(Context context) { scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); LayoutInflater.from(context).inflate(R.layout.carouselview_layout, this,true); carouselpager = (ViewPager) findViewById(R.id.carouselpager); indicator = (CirclePageIndicator) findViewById(R.id.indicator); } /** * 停止切换 */ public void stopScroller() { if (scheduledExecutorService != null && !scheduledExecutorService.isShutdown()) { scheduledExecutorService.shutdownNow(); } } public void startScroller() { if (scheduledExecutorService != null && !scheduledExecutorService.isShutdown()) { scheduledExecutorService.shutdownNow(); scheduledExecutorService = null; } scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); if (!scheduledExecutorService.isShutdown()) { scheduledExecutorService.scheduleAtFixedRate( new ScrollBannerTask(), 6, 6, TimeUnit.SECONDS); } } /** 当前轮播图的索引 */ private int currentItem = 0; private IPageOnPageChangeListener listener; private List<View> vie