笔记44--viewpager用法二

终于来补上了,7.21

这篇主要实现下ViewPager+小圆点:

一、原理

小圆点其实是一些图片,或者控件,只是用来区分当前ViewPager显示的是第几页。

布局上采用相对布局或者帧布局,使得小圆点和ViewPager的布局能重叠。

代码实现上主要理解下ViewPager.setOnPageChangeListener()事件。当ViewPager的页面改动时,同时更改小圆点指示的位置。

二、实现方式

1、xml中定义ViewPager和存放小圆点的容器。2、动态生成控件添加到ViewPager中,动态添加小圆点到存放小圆点的容器中。3、ViewPager的页面改动时,更改小圆点指示的位置。

三、代码

1、xml布局(外层是RelativeLayout)

<android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:layout_marginBottom="50dp"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">
        
    </LinearLayout>
2、动态添加控件到ViewPager和存放小圆点的容器(记得初始化时,设置小圆点指示的位置是0)

ll=(LinearLayout) findViewById(R.id.ll);
		
	ivList=new ArrayList<ImageView>();
	for(int i=0; i<5; i++){
		ImageView iv=new ImageView(this);
		iv.setImageResource(R.drawable.aaaa);
		ivList.add(iv);
			
		Button btn=new Button(this);
		if(i==0){
			btn.setText("1");
			nPrePosition=0;
		}
		else
			btn.setText("");
		ll.addView(btn);
	}
3、ViewPager显示的页面改动时,更改小圆点指示的位置

public void onPageSelected(int arg0) {		
	Button preBtn=(Button) ll.getChildAt(nPrePosition);
	preBtn.setText(null);
	Button curBtn=(Button) ll.getChildAt(arg0);
	curBtn.setText("1");
	nPrePosition=arg0;
}

四、优化问题
在上面第三步中可以采用循环的方式,如下:

for(int i=0; i<ivList.size(); i++){
	if(i==arg0){
		Button btn=(Button) ll.getChildAt(nPrePosition);
		btn.setText("1");
	}else{
		Button btn=(Button) ll.getChildAt(nPrePosition);
		btn.setText("");
	}
}
而上面用到的方式是:先定义一个变量nPrePosition来保存滑动后小圆点之前指示的是哪个位置,然后更改时,只需更改当前和前一次小圆点的指示位置,而不用变更所有的。

五、初始化原理

PagerAdapter(page>3)时,启动时,保存两个初始化的页,第一次滑动时,再保存一个经过初始化的页,即会保存当前页、上一页、下一页。当再次滑动时,会先销毁上上页,再初始化下一页,打印信息如下:



六、源码

你可能感兴趣的:(笔记44--viewpager用法二)