封装好的Android广告栏,效果较好功能强大,可以很方便地直接使用

使用ViewPager实现广告栏,效果为:可以自动滑动、手动滑动切换广告、可以点击进入广告详情、标示点指示当前广告。使用方法:调用封装好的几个方法很方便地就能实现广告栏效果。

主要代码如下:
广告栏实现类AchieveMyAdcolumn.java:

public class AchieveMyAdcolumn {

    private Context mContext;
    // viewpager控件作为广告栏
    private ViewPager adViewPager;
    private AdViewPagerAdapter adapter;
    private AdContentBean mAdContentBean;
    private List<View> adImages = new ArrayList<View>();
    private List<Integer> adImageId = new ArrayList<Integer>();
    private ImageView[] pointImages;
    private AtomicInteger atomicInteger = new AtomicInteger(0);
    private boolean isContinue = true;

    public AchieveMyAdcolumn(Context mContext, AdContentBean mAdContentBean) {
        this.mContext = mContext;
        this.mAdContentBean = mAdContentBean;
    }

    /** * 显示广告栏 * * @param pagerLayout * 装载广告栏图片的布局id * @param group * 装载表示图片的点的id */
    public void showAd(LinearLayout pagerLayout, ViewGroup group) {

        // 创建ViewPager
        adViewPager = new ViewPager(mContext);
        // 获取屏幕大小
        DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
        if (mAdContentBean.getHeightPercent() != 0) { // 手动设置了广告栏的高度
            // 根据屏幕信息设置ViewPager广告容器的宽高
            adViewPager
                    .setLayoutParams(new LayoutParams(dm.widthPixels,
                            (int) (dm.heightPixels * mAdContentBean
                                    .getHeightPercent())));
        } else { // 使用默认的高度
            adViewPager
                    .setLayoutParams(new LayoutParams(
                            dm.widthPixels,
                            (int) (dm.heightPixels * MyAdcolumn.HEIGHT_PERCENT_DEFAULT)));
        }

        initImagesAdapter();

        if (group != null) { // 装载标识点的布局不为空,则初始化标识点
            initSignPoints(group);
        }
        // 设置适配器
        adViewPager.setAdapter(adapter);

        adViewPager.setOnPageChangeListener(new IModelPageChangeListenerImp(
                mAdContentBean, atomicInteger, adImages, pointImages));

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    if (isContinue) {
                        AdHandler.sendEmptyMessage(atomicInteger.get());
                        atomicOption();
                    }
                }
            }
        }).start();

        // 将ViewPager容器添加到广告栏布局中
        pagerLayout.addView(adViewPager);

    }

    /** * 初始化广告栏中的图片,并据此初始化广告栏适配器 */
    private void initImagesAdapter() {

        adImageId = mAdContentBean.getImages();
        if (adImageId.size() != 0) {
            for (int i = 0; i < adImageId.size(); i++) {
                final ImageView tempImage = new ImageView(mContext);
                tempImage.setId(adImageId.get(i));
                tempImage.setBackgroundResource(adImageId.get(i));
                adImages.add(tempImage);
                tempImage.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        if (mICtrlAdOnClickListener != null) {
                            //处理点击事件
                            mICtrlAdOnClickListener.adItemOnClick(tempImage
                                    .getId());
                        }

                    }
                });
            }
            adapter = new AdViewPagerAdapter(adImages);
        }
    }

    /** * 初始化标识广告栏图片的点 * * @param group */
    private void initSignPoints(ViewGroup group) {
        pointImages = new ImageView[adImages.size()];
        // 广告栏的小圆点图标
        for (int i = 0; i < adImages.size(); i++) {
            // 创建一个ImageView, 并设置宽高. 将该对象放入到数组中
            ImageView tempPoint = new ImageView(mContext);
            tempPoint.setLayoutParams(new LayoutParams(10, 10));
            pointImages[i] = tempPoint;

            // 初始值, 默认第0个选中
            if (i == 0) {
                pointImages[i].setBackgroundResource(mAdContentBean
                        .getcurrentPoint());
            } else {
                pointImages[i].setBackgroundResource(mAdContentBean
                        .getotherPoint());
            }
            // 将小圆点放入到布局中
            group.addView(pointImages[i]);
        }
    }

    /** * 每隔固定时间切换广告栏图片 */
    @SuppressLint("HandlerLeak")
    private final Handler AdHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // 改变当前显示的图片,图片会自动滑动切换
            adViewPager.setCurrentItem(msg.what);
            super.handleMessage(msg);
        }

    };

    /** * 获取下一张要显示的图片,并控制广告在切换时间到之前图片保持 */
    private void atomicOption() {
        atomicInteger.incrementAndGet();
        if (atomicInteger.get() > adImages.size() - 1) {
            atomicInteger.getAndAdd(-(adImages.size()));
        }
        try {
            if (mAdContentBean.getSwitchTime() != 0) { //手动设置了切换间隔时间
                Thread.sleep(mAdContentBean.getSwitchTime());
            } else { //使用默认的切换间隔时间
                Thread.sleep(MyAdcolumn.SWITCH_TIME_DEFAULT);
            }

        } catch (InterruptedException e) {

        }
    }

    //广告栏图片点击监听器
    private ICtrlAdOnClickListener mICtrlAdOnClickListener;

    /** * 设置广告栏图片点击监听器 * @param mICtrlAdOnClickListener 监听器 */
    public void setICtrlAdOnClickListener(
            ICtrlAdOnClickListener mICtrlAdOnClickListener) {
        if (mICtrlAdOnClickListener != null) {
            this.mICtrlAdOnClickListener = mICtrlAdOnClickListener;
        }

    }

}

封装的广告栏类MyAdcolumn.java:

public class MyAdcolumn {

    /** * 默认的广告图片自动切换的间隔时间 */
    public static final int SWITCH_TIME_DEFAULT = 2000;
    /** * 默认的广告栏高度占屏幕的比例 */
    public static final float HEIGHT_PERCENT_DEFAULT = (float) 0.25;
    // 广告栏的实现类对象
    private AchieveMyAdcolumn mAchieveMyAdcolumn;
    // 存储广告栏相关信息的Bean
    private AdContentBean mAdContentBean = new AdContentBean();

    public MyAdcolumn(Context mContext) {
        mAchieveMyAdcolumn = new AchieveMyAdcolumn(mContext, mAdContentBean);
    }

    /** * 设置广告栏布局<br> * 将广告栏容器和标志点容器作为参数,参数为null则相应项不显示。 * * @param adImageLayout * 容纳广告栏图片的布局id * @param adPointLayout * 容纳标识图片的点的布局id */
    public void setAdLayout(LinearLayout adImageLayout, ViewGroup adPointLayout) {
        mAdContentBean.setAdLayout(adImageLayout);
        mAdContentBean.setAdPointLayout(adPointLayout);
    }

    /** * 设置广告栏的图片 * * @param adImageId * 广告栏图片id的列表 */
    public void setAdImages(List<Integer> adImageId) {
        mAdContentBean.setImages(adImageId);
    }

    /** * 设置广告栏图片的点击事件 * * @param mICtrlAdOnClickListener * 监听广告栏中点击事件的监听器 */
    public void setICtrlAdOnClickListener(
            ICtrlAdOnClickListener mICtrlAdOnClickListener) {
        // 设置点击监听器的方法定义在广告栏实现类中
        mAchieveMyAdcolumn.setICtrlAdOnClickListener(mICtrlAdOnClickListener);
    }

    /** * 设置广告栏中标识图片的点的id * * @param currentPointId * 表示广告栏中当前显示图片的点的id * @param otherPointsId * 表示广告栏中未显示图片的点的id */
    public void setAdSignPoints(int currentPointId, int otherPointsId) {
        mAdContentBean.setPoints(currentPointId, otherPointsId);
    }

    /** * 设置广告栏的高度占屏幕的高度的比例。不设置则为默认的1/4 * * @param adHeightPercent * 所占高度比,用小数标示,如:约占屏幕高度的1/3,表示为0.33 */
    public void setAdHeightPercent(float adHeightPercent) {
        mAdContentBean.setHeightPercent(adHeightPercent);
    }

    /** * 图片自动切换时间。不设置则为默认的2000ms * * @param switchTime * 切换时间值,单位是ms */
    public void setAdSwitchTime(int switchTime) {
        mAdContentBean.setSwitchTime(switchTime);
    }

    /** * 显示广告栏。<br> * 当广告栏设置完成后,最后调用该方法即可 */
    public void showAdcolumn() {

        if (mAdContentBean.getAdLayout() != null) {
            mAchieveMyAdcolumn.showAd(mAdContentBean.getAdLayout(),
                    mAdContentBean.getAdPointLayout());
        }

    }

}

以上为广告栏模块的主要代码,注释也应该够看,不多说了,相信看完以上代码能让读者对使用viewpager制作广告栏有所了解。
除了以上主要代码,还有一些部分如保存广告栏中信息的bean、广告栏viewpager适配器、ViewPager页面改变监听器的实现还有广告栏图片点击监听接口,都比较简单,就不贴代码了。

完整源码下载 。

更多Android开发技术一起探讨学习,点我 。

更多Android开发资源直接下载,点我 。

你可能感兴趣的:(android,viewpager,封装,广告栏,功能强大)