您的位置:首页 > 其它

带圆点标示的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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: