带有小圆点的无线轮播

## 布局文件 ##
xml布局文件activity_main中
    <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="120dip"
        tools:context="${relativePackage}.${activityClass}" >

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

        <LinearLayout
            android:id="@+id/ll_doc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true" >
        </LinearLayout>

    </RelativeLayout>

ViewPager布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>
## 两个小圆点的自定义图形 ##
选中状态自定义
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle" >

        <corners android:radius="8dip"/>
        <solid android:color="#f00"/>

    </shape>

未选中状态自定义
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle" >

        <corners android:radius="8dip"/>
        <solid android:color="#330000ff"/>

    </shape>
## 后台代码,主界面代码中 ##
 public class MainActivity extends Activity {

        private ViewPager vp;
        private LinearLayout ll_doc;
        private ArrayList<String> listPath;
        private ArrayList<ImageView> listImg;
        private String path = "http://www.meirixue.com/api.php?c=index&a=index";

        private Handler handler = new Handler () {
            public void handleMessage(android.os.Message msg) {
                switch (msg.what) {
                case 0:
                    // 第一步:初始化小圆点
                    initDoc();
                    // 第二步:对ViewPager进行适配
                    vp.setAdapter(new MyAdapter(MainActivity.this, handler, listPath));
                    // 第三步:设置当前ViewPager所在位置
                    vp.setCurrentItem(1000);
                    // 第四步:设置无线轮播
                    handler.sendEmptyMessageDelayed(1, 1500);
                    // 第五步:设置ViewPager监听器
                    viewPagerListner();
                    break;
                case 1:
                    int position = vp.getCurrentItem();
                    position += 1;
                    vp.setCurrentItem(position);
                    handler.sendEmptyMessageDelayed(1, 1500);
                    break;
                default:
                    break;
                }
            };
        };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            initView();
            initData();
        }

        // 初始化视图
        private void initView(){
            vp = (ViewPager) findViewById(R.id.vp);
            ll_doc = (LinearLayout) findViewById(R.id.ll_doc);
            listPath = new ArrayList<String>();
            listImg = new ArrayList<ImageView>();
        }

        // 初始化数据
        private void initData(){
            new Thread(){
                public void run() {
                    try {
                        URL url = new URL(path);
                        HttpURLConnection connect = (HttpURLConnection) url.openConnection();
                        connect.setRequestMethod("GET");
                        connect.setConnectTimeout(5000);
                        connect.setReadTimeout(8000);

                        if (connect.getResponseCode() == 200) {
                            BufferedReader read = new BufferedReader(new InputStreamReader(connect.getInputStream()));
                            StringBuffer sbf = new StringBuffer();
                            String str = null;
                            while ( (str=read.readLine()) != null ) {
                                sbf.append(str);
                            }

                            //解析数据
                            JSONObject root = new JSONObject(sbf.toString());
                            JSONObject data = root.optJSONObject("data");
                            JSONArray adlist = data.optJSONArray("adlist");
                            for (int i=0; i<adlist.length(); i++) {
                                JSONObject obj = adlist.optJSONObject(i);
                                String s = obj.optString("img");
                                Log.d("tag", s);
                                listPath.add(s);
                            }
                        }
                        handler.sendEmptyMessage(0);
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                };
            }.start();
        }

        // 初始化小圆点
        private void initDoc(){
            if (listImg != null) {
                listImg.clear();
            }

            for (int i=0; i<listPath.size(); i++) {
                ImageView image = new ImageView(MainActivity.this);
                if (i == 0) {
                    image.setImageResource(R.drawable.doc_seleted);
                } else {
                    image.setImageResource(R.drawable.doc_default);
                }
                // 设置参数
                LayoutParams params = new LayoutParams(20, 20);
                params.setMargins(5, 0, 5, 0);
                // 将小圆点添加到小圆点视图集合中,并放入线性布局中
                listImg.add(image);
                ll_doc.addView(image, params);
            }
        }

        // 设置ViewPager监听器,改变小圆点显示状态
        private void viewPagerListner(){
            vp.setOnPageChangeListener(new OnPageChangeListener() {

                @Override
                public void onPageSelected(int arg0) {
                    for (int i=0; i<listImg.size(); i++) {
                        if (i == arg0%listImg.size()) {
                            listImg.get(i).setImageResource(R.drawable.doc_seleted);
                        } else {
                            listImg.get(i).setImageResource(R.drawable.doc_default);
                        }
                    }
                }

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                }

                @Override
                public void onPageScrollStateChanged(int arg0) {
                }
            });
        }
    }
## ViewPager适配器实现 ##
public class MyAdapter extends PagerAdapter{

        private Context context;
        private Handler handler;
        private ArrayList<String> list;

        public MyAdapter(Context context, Handler handler, ArrayList<String> list) {
            super();
            this.context = context;
            this.handler = handler;
            this.list = list;
        }

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view = View.inflate(context, R.layout.item, null);
            ImageView image = (ImageView) view.findViewById(R.id.image);

            image.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_POINTER_UP:
                        handler.sendEmptyMessageDelayed(1, 1500);
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        handler.sendEmptyMessageDelayed(1, 1500);
                        break;
                    default:
                        break;
                    }
                    return true;
                }
            });

            ImageLoader.getInstance().displayImage(list.get(position%list.size()), image);
            container.addView(view);

            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值