一:首先来实现无限自动轮播,无限轮播无非也是三要素,控件、数据、适配器
1、控件
android:id="@+id/view_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
2、代码中首先初始化控件
ViewPager view_pager = (ViewPager) findViewById(R.id.view_pager);3、得到数据,首先创建集合(以图片为例),将图片加到集合中
4、设置适配器
public class ViewPagerAdapter extends PagerAdapter{//继承PagerAdapter //上下文和数据初始化 Context context; Listlist; public ViewPagerAdapter(Context context, List list) { this.context = context; this.list = list; }
@Override public int getCount() { return Integer.MAX_VALUE;//返回要展示的视图数量的最大值 } @Override public boolean isViewFromObject(View view, Object object) { return view==object;//当前页展示的视图是否跟object一致 } //手动提示重写两个方法 @Override public Object instantiateItem(ViewGroup container, int position) { //当前页面要展示的是imageView ImageView imageView = new ImageView(context); imageView.setImageResource(list.get(position%list.size())); imageView.setScaleType(ImageView.ScaleType.FIT_XY); //2.并要把当前的视图添加到容器中container container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { //Log.i("destroyItem", position+"----"); // 在容器中把试图给移除 container.removeView((View) object); }}
private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { if (msg.what == 0) { //接收到消息之后向下滑动一页 //获取当前页所在的位置 int currentItem = view_pager.getCurrentItem(); view_pager.setCurrentItem(currentItem+1); //再次发送消息 handler.sendEmptyMessageDelayed(0, 1000); } }; };
//设置适配器之后发送一个延时两秒的空消息 handler.sendEmptyMessageDelayed(0, 1000); 二:小圆点的创建和设置 1、创建LinerLayout
android:layout_alignBottom="@+id/view_pager"
android:id="@+id/li_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
2、Drawable中创建两个XML布局用来区分两种颜色,局一列
xmlns:android="http://schemas.android.com/apk/res/android">
android:color="#ff0000"/>
android:radius="5dp"/>
android:height="10dp" android:width="10dp"/>
3、create中调用此方法
/** * 初始化小圆点的方法 * * 1.imageView...添加到layout * 2.创建一个集合记录这些小圆点的图片 */ private void IconData() { iamgelist = new ArrayList<>(); //for循环创建小圆点,,,加到布局,,,加到集合.....在循环之前先清空一下集合和布局 li_layout.removeAllViews(); iamgelist.clear(); for (int i = 0; i < list.size(); i++) { ImageView imageView = new ImageView(MainActivity.this); if (i== 0) {//显示的是第一张图片的时候 imageView.setImageResource(R.drawable.color_one);//选中,,,红色 }else { imageView.setImageResource(R.drawable.color_two); } //添加...LayoutParams布局的参数...linearLayout下面的LayoutParams,导包正确 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); //圆点之间的间距 params.setMargins(5, 0, 5, 0); //添加到布局 li_layout.addView(imageView, params ); //添加到集合 iamgelist.add(imageView); } } 4.设置监听事件,让ViewPager与小圆点结合
//设置viewpager的监听 view_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { //小圆点与viewPager联动 for (int i = 0; i < list.size(); i++) { if (i == position) {//当前位置的小圆点应该是红色的 iamgelist.get(i).setImageResource(R.drawable.color_two); }else { iamgelist.get(i).setImageResource(R.drawable.color_one); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } });
此代码有BUG,第二遍重复轮播时,会失去与小圆点的联动,请大牛给予帮助,谢谢