带圆点标示的ViewPager

来源:互联网 发布:热传导分析软件 编辑:程序博客网 时间:2024/05/16 14:59

  为了实现ViewPager滚动页面标示,我们通常都会在布局文件中添加圆点布局,现提供一种融合后的


public class UniversialViewPager<T> extends RelativeLayout{    private Context mContext;    private ViewPager viewPager;    private LinearLayout ll_imgswitch;    private ImageView currentImg;    private int screenWidth;    private List<T> datas;    public UniversialViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;        screenWidth = context.getResources().getDisplayMetrics().widthPixels;        initialViews();    }    private void initialViews(){        viewPager = new ViewPager(mContext);        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int i, float v, int i2) {            }            @Override            public void onPageSelected(int i) {                changePosition(i);            }            @Override            public void onPageScrollStateChanged(int i) {            }        });        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);        addView(viewPager,layoutParams);        ll_imgswitch = new LinearLayout(mContext);        ll_imgswitch.setOrientation(LinearLayout.HORIZONTAL);        ll_imgswitch.setGravity(Gravity.CENTER);        RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);        layoutParams1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);        layoutParams1.bottomMargin = StringUtils.dip2px(mContext,3);        addView(ll_imgswitch, layoutParams1);    }    public void fillDatas(List<T> datas){        if(datas!=null&&datas.size()>1){            initImgNum(datas.size());        }        viewPager.setAdapter(new MyAdapter(datas));    }    private class MyAdapter extends PagerAdapter {        private List datas ;        public MyAdapter(List<T> datas){            this.datas=datas;        }        @Override        public int getCount() {            return datas.size();        }        @Override        public boolean isViewFromObject(View view, Object o) {            return view==o;        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            View view = LayoutInflater.from(mContext)                    .inflate(R.layout.home_ad_item, null);            ImageView imageView = (ImageView) view.findViewById(R.id.iv_ad);            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            /*......*/            imageView.setTag(datas.get(position));            imageView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    if(v instanceof ImageView){                        T info = (T) ((ImageView)v).getTag();                        if(info==null)return;                      //  ((HomeActivity)mContext).jumpAD(info); 调用activity的方法处理点击事件                    }                }            });            container.addView(view);            return view;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            super.destroyItem(container, position, object);            container.removeView((View)object);        }        @Override        public void destroyItem(View container, int position, Object object) {            //此方法保持空,不要删除,默写版本viewpager会调用此父类方法,抛出异常        }    }    // 广告位小圆点相关    private void initImgNum(int num) {        ll_imgswitch.removeAllViews();        for (int i = 0; i < num; i++) {            ImageView img = new ImageView(mContext);            img.setImageResource(R.drawable.ad_switcher_btn);            if (screenWidth <= 480) {                img.setPadding(10, 0, 0, 0);            } else                img.setPadding(25, 0, 0, 0);            ll_imgswitch.addView(img);        }        changePosition(0);    }    protected void changePosition(int position) {        if (currentImg != null)            currentImg.setImageResource(R.drawable.ad_switcher_btn);        currentImg = (ImageView) ll_imgswitch.getChildAt(position);        currentImg.setImageResource(R.drawable.ad_switcher_btn_selected);    }}


0 0
原创粉丝点击