ViewPager图片无限轮播加轮播指示器

来源:互联网 发布:python爬虫源码 编辑:程序博客网 时间:2024/06/01 09:07

要想达到加载网络图片实现无限轮播的效果,首先,你需要定义一个比较合理的布局

<RelativeLayout        android:layout_width="match_parent"        android:layout_height="200dp">        <android.support.v4.view.ViewPager            android:id="@+id/vp"            android:layout_width="match_parent"            android:layout_height="200dp"/>        <LinearLayout            android:id="@+id/linear"            android:orientation="horizontal"            android:layout_centerHorizontal="true"            android:layout_alignParentBottom="true"            android:layout_marginBottom="20dp"            android:layout_width="wrap_content"            android:layout_height="wrap_content"/>    </RelativeLayout>

以上就是一个相对布局中用了一个ViewPager用来加载图片,靠近相对布局控件的底部有一个相对布局用来存储轮播指示器。这些工作做好了之后,就需要设置联网权限和添加一些图片加载框架了 ,在这里不一一说明。

我这里找了三张网络图片:

List<String> imageList= Arrays.asList("http://cdn.duitang.com/uploads/blog/201308/18/20130818150526_Ru2Bk.thumb.600_0.png",            "http://www.bkill.com/u/info_img/2012-09/02/2012083116140522302.jpg",            "http://www.it165.net/uploadfile/2011/1218/20111218070928328.jpg");

还需要给vp设置一个适配器

//ViewPager的适配器类    public class MyPagerAdapter extends PagerAdapter {        @Override        public int getCount() {            //数量为2147483647            return Integer.MAX_VALUE;        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView((View) object);        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            ImageView image = new ImageView(MainActivity.this);            ImageLoader.getInstance().displayImage(imageList.get(position % imageList.size()),image,MyApplication.getOptions());            container.addView(image);            return image;        }    }

因为下文要利用线程发送空消息,因此还需要定义一个handler

    //定义Handler    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            vp.setCurrentItem(page);        }    };



接下来设置轮播方法

    private void autoplay() {        new Thread(){            @Override            public void run() {                while(true){                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    //增加图片下标玛                    page++;                    //发送空消息                    handler.sendEmptyMessage(0);                }            }        }.start();    }    //加载图片的方法    public void initView(){        vp.setAdapter(new MyPagerAdapter());        linear = (LinearLayout)findViewById(R.id.linear);        for (int i = 0; i<imageList.size();i++){            View doView = new View(this);            //小圆点的大小            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30);            //小圆点左边距和右边距            params.rightMargin = 10;            params.leftMargin = 10;            //加载小圆点到视图中            doView.setLayoutParams(params);            //当显示的图片的下标和i相等时,显示选中状态            if(i == 0){                doView.setBackgroundResource(R.drawable.shape_select);                //否则。            }else {                doView.setBackgroundResource(R.drawable.select_normal);            }            //把布局加载到linearlayouot            linear.addView(doView);        }        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //图片改变后,让小圆点改变为当前下标状态                linear.getChildAt(position % imageList.size()).setBackgroundResource(R.drawable.shape_select);                //其他的改变为默认                linear.getChildAt(oldPositon % imageList.size()).setBackgroundResource(R.drawable.select_normal);                //将当前下标赋给之前的下标                oldPositon = position;            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }

做完这些之后,在activity的相关方法中调用一下即可。

原创粉丝点击