带圆点标示的ViewPager
2016-06-27 17:34
197 查看
为了实现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); } }
相关文章推荐
- 解决eclipse ctrl+鼠标左键不能用
- rsync命令排除文件和文件夹(exclude-from)
- linux下导入、导出mysql数据库命令
- 【杭电-oj】-2030-汉字统计
- Struts2文件上传
- CSS3边框 , 背景
- linux shell的流程控制
- javaweb学习总结(五)——Servlet开发(一)
- gcc 选项-I -L -l
- angularjs 权威指南 版本 1.2.6
- CSS旋转&翻转,兼容方案
- 会呼吸的圆
- 在MySQL中阻止UPDATE语句没有添加WHERE条件的发生
- android L 上切换字库方法
- javaweb学习总结(四)——Http协议
- 储水量
- 设计模式:创建型模式
- Uri中ContentValues的用法+Android中ContentProvider总结
- 自动触发按钮的点击事件
- 三角蛋糕