ViewPager简单实现

ViewPager在我们的开发中用到的非常多,现在基本每个页面都需要用到它,和ListView一样频繁;

下面先说一下最简单的使用:注意:ViewPager导包一定要导入Android Support v4:  这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的

只是为了避免其它版本出错;

下面是自己简单实现的代码段:(注释比较详细)

1:布局:(这里我用的是eclipse,libs包下导入V4jar包,Android studio会自动导入V4

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >


    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />


    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="60dp"
        android:orientation="horizontal" >


        <RadioButton
            android:id="@+id/but1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
             />


        <RadioButton
            android:id="@+id/but2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


        <RadioButton
            android:id="@+id/but3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />


        <RadioButton
            android:id="@+id/but4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RadioGroup>


</RelativeLayout>

//这里是MainActivity里实现

public class MainActivity extends Activity {

	private ViewPager viewPager;
	private List<Integer> list;
	private RadioGroup radioGroup;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取资源ID
        viewPager=(ViewPager) findViewById(R.id.viewpager);
        list=new ArrayList<Integer>();
        radioGroup=(RadioGroup) findViewById(R.id.radiogroup);
        
        //讲图片添加到List集合当中
        list.add(R.drawable.a);
        list.add(R.drawable.c);
        list.add(R.drawable.d);
        
        //获取适配器
        ViewPagerAdapter adapter=new ViewPagerAdapter(this,list);
        viewPager.setAdapter(adapter);
        //设置默认的位置
        viewPager.setCurrentItem(list.size()*10000);
        //监听ViewPager
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {
			//选择当前的图片
			@Override
			public void onPageSelected(int position) {
				// TODO Auto-generated method stub
				//通过的到图片选中的位置去设置radioButton
				switch (position%list.size()) {
				case 0:
					//通过radioGroup检查radioButton
					radioGroup.check(R.id.but1);
					break;
				case 1:
					radioGroup.check(R.id.but2);
					break;
				case 2:
					radioGroup.check(R.id.but3);
					break;
				case 3:
					radioGroup.check(R.id.but4);
					break;

				default:
					break;
				}
			}
			//
			@Override
			public void onPageScrolled(int position, float positionOffset,
					int positionOffsetPixels) {
				// TODO Auto-generated method stub
				//偏移值
//				Log.i("TAG", "positionOffset"+positionOffset);
//				Log.i("TAG", "positionOffsetPixels"+positionOffsetPixels);
				
				
			}
			//还动改变的方法
			/***
			 * 
			 * ViewPager#SCROLL_STATE_IDLE   停止   0
			 * ViewPager#SCROLL_STATE_DRAGGING  拖动   1
			 * ViewPager#SCROLL_STATE_SETTLING  弹回   2
			 * 
			 */
			@Override
			public void onPageScrollStateChanged(int state) {
				// TODO Auto-generated method stub
//				Log.i("TAG", "state"+state);
			}
		});
      
        
        
    }
   
    
}
//这里是给·viewPager设置的适配器

public class ViewPagerAdapter extends PagerAdapter{

	private List<Integer> list;
	private Context context;
	
	public ViewPagerAdapter(Context context,List<Integer> list) {
		super();
		this.list = list;
		this.context=context;
	}

	//图页的总条目数
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return Integer.MAX_VALUE;//最大值
	}
	//判断函数所返回来的Key与一个页面视图是否是代表的同一个视图,如果相等  true
	@Override
	public boolean isViewFromObject(View view, Object object) {
		// TODO Auto-generated method stub
		return view==object;
	}

	//创建视图  根据指定位置将视图添加到容器当中
	//uper.instantiateItem(container, position);  必须删点  通过看源码 里面抛出的是异常
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		// TODO Auto-generated method stub
		
		ImageView imageView=new ImageView(context);
		imageView.setImageResource(list.get(position%list.size()));
		imageView.setScaleType(ScaleType.FIT_XY);
		
		container.addView(imageView);
		return imageView;
	}
	
	//销毁视图  根据指定位置删除ViewGroup视图
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		// TODO Auto-generated method stub
		
		container.removeView((View)object);
		
	}
	
}

这里写的是最简单的ViewPager,在开发是缺点比较多,后续会更新补充

补充:如果想设置自动轮播  需要使用handler,

及:在获得完适配器后面New Thread设置耗时时间,最后在onCreate上面添加handler接受消息 ,修改UI,定义一个int i=0;

然后获得当前轮播到的位置 i=viewPager.getCurrentItem();   在进行设置每个几秒显示的位置viewPager.setCurrentItem(i+1);

这样就可以了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值