廣告輪播類封裝

ADBanner

public class ADBanner
{
    private List<ImageView> mList;
    private ViewPager mPager;
    private Context mContext;

    /**
     * 總的頁數
     */
    private int pageCount;
    /**
     * 當前顯示的是第幾頁
     */
    private int curIndex = 0;

    private DisplayImageOptions options = null;

    private LinearLayout mLlDot;
    private ScrollTask scrollTask;
    // 定時任務
    private ScheduledExecutorService scheduledExecutorService;
    private int oldPosition = 0;
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            mPager.setCurrentItem(curIndex);
        };
    };
    private BannerAdapter bannerAdapter;

    public ADBanner(ViewPager mPager, Context mContext, LinearLayout mLlDot)
    {
        this.mPager = mPager;
        this.mContext = mContext;
        options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.health_teach_loading).showImageForEmptyUri(R.drawable.health_teach_error).showImageOnFail(R.drawable.health_teach_error).build();
        this.mLlDot = mLlDot;
    }
/*
    public void setupADBanner()
    {
        scrollTask = new ScrollTask();
        pageCount = bannerBeanList.size();
        mList = new ArrayList<>();
        for (BannerBean bannerBean : bannerBeanList)
        {
            // 設置廣告圖
            ImageView imageView = new ImageView(mContext);
            imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            ImageLoader.getInstance().displayImage(bannerBean.getImageUrl(), imageView, options);
            mList.add(imageView);
        }
        bannerAdapter = new BannerAdapter(mList);
        //設置適配器
        mPager.setAdapter(bannerAdapter);
        //設置圓點
        setOvalLayout();
        startAd();
    }*/

    /**
     * 創建或更新廣告數據
     */

    public void createOrUpdateADDatas(List<BannerBean> newBannerBeanList){
        //stopThread();

        if(mList==null){
            mList = new ArrayList<>();
        }else{
            mList.clear();
        }
        pageCount = newBannerBeanList.size();

        for (BannerBean bannerBean : newBannerBeanList)
        {
            // 設置廣告圖
            ImageView imageView = new ImageView(mContext);
            imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            ImageLoader.getInstance().displayImage(bannerBean.getImageUrl(), imageView, options);
            mList.add(imageView);
        }
        if(bannerAdapter==null){
            bannerAdapter = new BannerAdapter(mList);
            //設置適配器
            mPager.setAdapter(bannerAdapter);
        }else{
            bannerAdapter.notifyDataSetChanged();
            handler.obtainMessage().sendToTarget();
        }

        curIndex=0;
        oldPosition=0;
        //設置圓點
        setOvalLayout();
       // startAd();
        if(scrollTask==null){
            scrollTask = new ScrollTask();
            startAd();
        }
    }

    /**
     * 設置圓點
     */
    public void setOvalLayout()
    {
        mLlDot.removeAllViews();
        for (int i = 0; i < pageCount; i++)
        {
            View view = LayoutInflater.from(mContext).inflate(R.layout.dot, null);
            mLlDot.addView(view);
            view.setPadding(8, 8, 8, 8);
        }
        // 默認顯示第一頁
        ((ImageView) mLlDot.getChildAt(0).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangreen);
        mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
        {
            public void onPageSelected(int position)
            {
                curIndex = position;

                // 取消圓點選中
                ((ImageView) mLlDot.getChildAt(oldPosition).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangary);
                // 圓點選中
                ((ImageView) mLlDot.getChildAt(position).findViewById(R.id.v_dot)).setImageResource(R.drawable.diangreen);

                oldPosition = position;
            }

            public void onPageScrolled(int arg0, float arg1, int arg2)
            {
            }

            public void onPageScrollStateChanged(int arg0)
            {
            }
        });
    }


    private class BannerAdapter extends PagerAdapter
    {

        //數據源
        private List<ImageView> mList;

        public BannerAdapter(List<ImageView> list)
        {
            this.mList = list;
        }

        @Override
        public int getCount()
        {
            return mList.size();
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1)
        {
            return arg0 == arg1;
        }

        @Override
        public Object instantiateItem(ViewGroup container, final int position)
        {
            ImageView iv = mList.get(position % mList.size());
            container.addView(iv);
            iv.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    ToastUtil.showToast("點擊:"+position);
                }
            });
            return iv;

        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object)
        {
            container.removeView(mList.get(position % mList.size()));
        }

    }


    public void stopThread(){
        scheduledExecutorService.shutdown();
    }

    private void startAd() {
        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.scheduleAtFixedRate(scrollTask, 1, 5,
                TimeUnit.SECONDS);
    }

    private class ScrollTask implements Runnable {

        @Override
        public void run() {
            synchronized (mPager) {
                curIndex = (curIndex + 1) % mList.size();
                handler.obtainMessage().sendToTarget();
            }
        }
    }
}

佈局xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
            android:id="@+id/ad_viewpager"
            android:layout_width="match_parent"
            android:layout_height="150dp" />

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/ad_viewpager"
            android:background="#33000000"
            android:orientation="vertical"
            android:padding="5dp" >

        <LinearLayout
                android:id="@+id/ad_points"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

使用:

 if(adBanner==null){
            //設置測試數據
            BannerBean bannerBean=new BannerBean();
            bannerBean.setImageUrl("http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg");

            BannerBean bannerBean2=new BannerBean();
            bannerBean2.setImageUrl("http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg");

            BannerBean bannerBean3=new BannerBean();
            bannerBean3.setImageUrl("http://pic18.nipic.com/20111215/577405_080531548148_2.jpg");

            List<BannerBean> bannerBeenList=new ArrayList<>();
            bannerBeenList.add(bannerBean);
            bannerBeenList.add(bannerBean2);
            bannerBeenList.add(bannerBean3);

            adBanner=new ADBanner(adViewpager,getActivity(),bannerBeenList,adPoints);
            adBanner.setupADBanner();
        }else{
            //設置測試數據
            BannerBean bannerBean=new BannerBean();
            bannerBean.setImageUrl("http://img.taodiantong.cn/v55183/infoimg/2013-07/130720115322ky.jpg");

            BannerBean bannerBean2=new BannerBean();
            bannerBean2.setImageUrl("http://pic30.nipic.com/20130626/8174275_085522448172_2.jpg");
     List<BannerBean> bannerBeenList=new ArrayList<>();
            bannerBeenList.add(bannerBean);
            bannerBeenList.add(bannerBean2);

            adBanner.updateADDatas(bannerBeenList);
        }
 @Override
    public void onDestroy()
    {
        super.onDestroy();
        adBanner.stopThread();


    }

參考資料:
自定義廣告輪播Banner

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章