要实现viewPager下面的导航按钮,为了方便,我们建立一个自定义view来复用,用起来也方便
首先要新建一个类NavImgLayout集成LinearLayout.
在构造方法里解析自定义属性
/** * 解析属性 * @param attrs */ private void paresAttr(AttributeSet attrs) { TypedArray ta = getResources().obtainAttributes(attrs, R.styleable.navattr); checkedimg = ta.getResourceId(R.styleable.navattr_checkedimg, 0); uncheckedimg = ta.getResourceId(R.styleable.navattr_uncheckedimg,0); imgcount = ta.getInt(R.styleable.navattr_count, 0); }
这里分别定义三个属性,一个数选中的图片一个是未选中的图片,一个是按钮的数量,分别对这三个对象进行赋值
然后初始化按钮
private void initView() { params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params.leftMargin = 5; params.rightMargin = 5; this.setGravity(Gravity.CENTER); if(imgcount > 0){ for (int i = 0; i < imgcount; i++) { ImageView iv = new ImageView(getContext()); if(i==index){ iv.setImageResource(checkedimg); iv.setTag("checked"); }else{ iv.setImageResource(uncheckedimg); } iv.setLayoutParams(params); this.addView(iv); } } }
提供一些对外的接口方便用户操作
//下一个选项
public void next(){ if(index != imgcount-1){ index ++; selectByIndex(index); } }
//设置按钮数量 public void setCount(int imgcount){ this.imgcount = imgcount; initView(); } //上一个选项 public void above(){ if(index != 0){ index--; selectByIndex(index); } }根据坐标改变imageview的属性
public void selectByIndex(int index){ ImageView checkedIv = (ImageView) this.findViewWithTag("checked"); checkedIv.setImageResource(uncheckedimg); checkedIv.setTag(null); ImageView iv = (ImageView) this.getChildAt(index); iv.setImageResource(checkedimg); iv.setTag("checked"); }
这样就完成了一个自定义navGroup的,以后要使用直接在xml文件里面使用就可以。