用ViewPager实现广告栏

来源:互联网 发布:java string搜索 编辑:程序博客网 时间:2024/04/28 19:38
publicclass AdPagerMainActivity extendsActionBarActivity {
     
    privateImageView mDefaultImage = null;
     
    privateViewPager mImagePager = null;
     
    privateImageView[] mImageViews = null;
     
    privateAtomicInteger what = newAtomicInteger(0);
     
    privateboolean isContinue = true;
     
    privateList<view> advPics;
     
    privateContext mContext;
     
    privateImageView mImageView;
     
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout_ad_pager);
        init();
        initView();
        initViewPager();
    }
     
    /**
     * 初始化数据
     */
    privatevoid init() {
        mContext = this;
        advPics = newArrayList<view>();
    }
     
    /**
     * 初始化控件
     */
    privatevoid initView() {
        // TODO Auto-generated method stub
        mDefaultImage = (ImageView) findViewById(R.id.home_default_image);
        mImagePager = (ViewPager) findViewById(R.id.adv_pager);
    }
     
    /**
     * void
     */
    privatevoid initViewPager() {
        // TODO Auto-generated method stub
        mDefaultImage.setVisibility(View.GONE);
        mImagePager.setVisibility(View.VISIBLE);
         
        ImageView img1 = newImageView(mContext);
        img1.setBackgroundResource(R.drawable.img1);
        advPics.add(img1);
         
        ImageView img2 = newImageView(mContext);
        img2.setBackgroundResource(R.drawable.img2);
        advPics.add(img2);
         
        ImageView img3 = newImageView(mContext);
        img3.setBackgroundResource(R.drawable.img3);
        advPics.add(img3);
         
        ImageView img4 = newImageView(mContext);
        img4.setBackgroundResource(R.drawable.img4);
        advPics.add(img4);
         
        // group是R.layou.mainview中的负责包裹小圆点的LinearLayout.
        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
        mImageViews = newImageView[advPics.size()];
        LinearLayout.LayoutParams layoutParams = newLinearLayout.LayoutParams(13,13);
        layoutParams.setMargins(5,0,5,1);
         
        for(inti = 0; i < advPics.size(); i++) {
            mImageView = newImageView(this);
            mImageView.setLayoutParams(layoutParams);
            mImageViews[i] = mImageView;
            if(i == 0) {
                // 默认选中第一张图片
                mImageViews[i].setBackgroundResource(R.drawable.item_focus);
            }
            else{
                mImageViews[i].setBackgroundResource(R.drawable.item_unfocus);
            }
            group.addView(mImageViews[i]);
        }
         
        mImagePager.setAdapter(newAdvAdapter(advPics));
        mImagePager.setOnPageChangeListener(newGuidePageChangeListener());
        // 按下时不继续定时滑动,弹起时继续定时滑动
        mImagePager.setOnTouchListener(newView.OnTouchListener() {
             
            @Override
            publicboolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()) {
                    caseMotionEvent.ACTION_DOWN:
                    caseMotionEvent.ACTION_MOVE:
                        isContinue = false;
                        break;
                    caseMotionEvent.ACTION_UP:
                        isContinue = true;
                        break;
                    default:
                        isContinue = true;
                        break;
                }
                returnfalse;
            }
        });
        // 定时滑动线程
        newThread(newRunnable() {
             
            @Override
            publicvoid run() {
                while(true) {
                    if(isContinue) {
                        viewHandler.sendEmptyMessage(what.get());
                        whatOption();
                    }
                }
            }
             
        }).start();
    }
     
    /**
     * 操作圆点轮换变背景
     */
    privatevoid whatOption() {
        what.incrementAndGet();
        if(what.get() > mImageViews.length - 1) {
            what.getAndAdd(-mImageViews.length);
        }
        try{
            if(what.get() == 1) {
                Thread.sleep(3000);
            }
            else{
                Thread.sleep(2000);
            }
        }
        catch(InterruptedException e) {
        }
    }
     
    /**
     * 处理定时切换广告栏图片的句柄
     */
    @SuppressLint(HandlerLeak)
    privatefinal Handler viewHandler = newHandler() {
         
        @Override
        publicvoid handleMessage(Message msg) {
            mImagePager.setCurrentItem(msg.what);
            super.handleMessage(msg);
        }
    };
     
    /** 指引页面改监听器 */
    privatefinal class GuidePageChangeListener implementsOnPageChangeListener {
         
        @Override
        publicvoid onPageScrollStateChanged(intarg0) {
             
        }
         
        @Override
        publicvoid onPageScrolled(intarg0, floatarg1, intarg2) {
             
        }
         
        @Override
        publicvoid onPageSelected(intarg0) {
            arg0 = arg0 % advPics.size();
            for(inti = 0; i < mImageViews.length; i++) {
                mImageViews[arg0].setBackgroundResource(R.drawable.item_focus);
                if(arg0 != i) {
                    mImageViews[i].setBackgroundResource(R.drawable.item_unfocus);
                }
            }
            what.set(arg0);
        }
    }
     
    /**
     * @Description: 广告栏PaperView 图片适配器
     */
    privatefinal class AdvAdapter extendsPagerAdapter {
        privateList<view> views = null;
         
        publicAdvAdapter(List<view> views) {
            this.views = views;
        }
         
        @Override
        publicvoid destroyItem(View arg0, intarg1, Object arg2) {
            ((ViewPager) arg0).removeView(views.get(arg1));
        }
         
        @Override
        publicvoid finishUpdate(View arg0) {
             
        }
         
        @Override
        publicint getCount() {
            returnviews.size();
        }
         
        @Override
        publicObject instantiateItem(View arg0, intarg1) {
            ((ViewPager) arg0).addView(views.get(arg1), 0);
            returnviews.get(arg1);
        }
         
        @Override
        publicboolean isViewFromObject(View arg0, Object arg1) {
            returnarg0 == arg1;
        }
         
        @Override
        publicvoid restoreState(Parcelable arg0, ClassLoader arg1) {
             
        }
         
        @Override
        publicParcelable saveState() {
            returnnull;
        }
         
        @Override
        publicvoid startUpdate(View arg0) {
             
        }
    }
}
0 0