实现轮播图的广告位

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoshuxgh/article/details/85071630

效果图:

 轮播图的大家肯定都已经很了解了,下面呢,直接贴一下我实现的代码:

布局文件:

<com.zhy.autolayout.AutoRelativeLayout
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="350px"
    android:focusable="true"
    android:focusableInTouchMode="true">

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


    <com.zhy.autolayout.AutoRelativeLayout

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"

        android:layout_marginBottom="10px">

        <!-- 存放代表viewpager播到第几张的小圆点 -->
        <com.zhy.autolayout.AutoLinearLayout
            android:id="@+id/ll_tag"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginRight="30px"
            android:gravity="center_vertical"
            android:orientation="horizontal"></com.zhy.autolayout.AutoLinearLayout>

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/ll_tag"
            android:paddingLeft="20px"
            android:singleLine="true"
            android:textColor="@color/colorWhiteText"
            android:textSize="14sp" />
    </com.zhy.autolayout.AutoRelativeLayout>

</com.zhy.autolayout.AutoRelativeLayout>

下面试java代码:

//控制图片是否开始轮播的开关,默认关的
private boolean isStart = false;
//统计下载了几张图片
int mPicNumber = 0;
//统计当前viewpager轮播到第几页
int p = 0;
//准备好三张网络图片的地址
private List<String> imageUrl;
private List<String> titles;
//存储小圆点的一维数组
private ImageView tag[];
//开始图片轮播的线程
private MyThread t;
mRl = (AutoRelativeLayout) findViewById(R.id.rl);
mLlTag = (AutoLinearLayout) findViewById(R.id.ll_tag);
mTvTitle = (TextView) findViewById(R.id.tv_title);
mViewpager = (ViewPager) findViewById(R.id.viewpager); 
private void setInit() {
        NetModelImpl netModel = new NetModelImpl();
        Map<String, String> params = new HashMap<>();
        params.put("OP", " bannear ");//op 数据
        params.put("user_Group_ID", Constants.GROUPID);
        params.put("lang", "" + (getActivity().getResources().getConfiguration().locale.getCountry().equals("CN") ? "zh" : "en"));
        params.put("APPType", "android");
        params.put("PlantType", Constants.ISBIG);

        netModel.postNetValue(Constants.ShopMallHandlerURL, params, new NetConnectionBack() {
            @Override
            public void onSuccess(String response) {

                try {
                    Log.e("TAGresponse=shophome", response + "");
                    shopHomeBean = new Gson().fromJson(response, ShopHomeBean.class);
                    if (response != null && shopHomeBean.getErrorCode().equals("200")) {

                        if (shopHomeBean.getData1().size() > 0) {
                            mPicNumber = 0;
                            mHandler.removeCallbacksAndMessages(null);
                            imageUrl = new ArrayList<>();
                            titles = new ArrayList<>();
                            for (int i = 0; i < shopHomeBean.getData1().size(); i++) {
                                if (!shopHomeBean.getData1().get(i).getImgurl().split("\\|")[0].equals("")) {
                                    String s = shopHomeBean.getData1().get(i).getImgurl().split("\\|")[0];
                                    String a[] = s.split("&");
                                    imageUrl.add(a[0] + "&width=750&height=320");
//                                    titles.add(shopHomeBean.getData1().get(i).getLinkurl());
                                }
                            }
                            init();
                        } else {
//
                            mRl.setVisibility(View.GONE);
                            mViewpager.setVisibility(View.GONE);
                        }
                        if (shopHomeBean.getData2().size() > 0) {

                            TabGridViewAdapter adapter = new TabGridViewAdapter();
                            mGridTab.setAdapter(adapter);

                        } else {
                            mGridTab.setVisibility(View.GONE);
                        }


                    }
                } catch (JsonSyntaxException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(String err) {
                Log.e("TAGresponse", err);
            }
        }, getActivity());
    }
 private void init() {
//        mTvTitle.setText(titles.get(0));
        mViewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                try {
                    // TODO Auto-generated method stub
                    //把当前的页数赋值给P
                    p = position;
                    //得到当前图片的索引,如果图片只有三张,那么只有0,1,2这三种情况
                    int currentIndex = (position % imageUrl.size());
                    for (int i = 0; i < tag.length; i++) {
                        if (i == currentIndex) {
//                            mTvTitle.setText(titles.get(i));
                            if (getActivity() != null)
                                tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_full));
                        } else {
                            if (getActivity() != null)
                                tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_blank));
                        }
                    }
                } catch (Resources.NotFoundException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        //构造一个存储照片的集合
        data = new ArrayList<>();

        data.clear();
        //从网络上把图片下载下来
        for (int i = 0; i < imageUrl.size(); i++) {
            getImageFromNet(imageUrl.get(i));
        }
    }

    protected void creatTag() {
        tag = new ImageView[imageUrl.size()];
        for (int i = 0; i < imageUrl.size(); i++) {
            tag[i] = new ImageView(getActivity());
            //第一张图片画的小圆点是白点
            if (i == 0) {
                tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_full));
            } else {
                //其它的画灰点
                tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_blank));
            }
            //设置上下左右的间隔
            tag[i].setPadding(10, 10, 10, 10);
            LinearLayout.LayoutParams ls = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL);
            ls.setMargins(0, 0, 0, 8);
            tag[i].setLayoutParams(ls);
            //添加到viewpager底部的线性布局里面
            mLlTag.addView(tag[i]);
        }
    }

    private void getImageFromNet(final String imagePath) {
        try {
            mPicNumber++;
            Log.i("", "handleMessage: mPicNumber" + mPicNumber);
            ImageView iv = new ImageView(getActivity());
            iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
            GlideUtils.loadPic(getActivity(),
                    imagePath,
                    iv);
            //把图片添加到集合里
            data.add(iv);
            //当接收到第三张图片的时候,设置适配器,
            if (mPicNumber == imageUrl.size()) {
                mViewpager.setAdapter(new ShopPaAdapter(data, getActivity(), shopHomeBean.getData1()));
                //创建小圆点
                creatTag();
                if (imageUrl.size() > 1) {
                    //把开关打开
                    isStart = true;
                    t = new MyThread();
                    //启动轮播图片线程
                    t.start();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Override
    public void onStop() {
        super.onStop();
        mHandler.removeCallbacksAndMessages(null);
        Log.e("TAGresponse", "onStop");
    }
class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        while (isStart) {
            Message message = new Message();
            message.what = 1;
            message.obj = p;
            mHandler.sendMessage(message);

            try {
                //睡眠3秒,在isStart为真的情况下,一直每隔三秒循环
                Thread.sleep(5000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            p++;
        }
    }
}
private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
                //接受到的线程发过来的p数字
                int page = (Integer) msg.obj;
                mViewpager.setCurrentItem(page);
                break;
        }
    }
};

 ViewPager的adapter:

public class ShopPaAdapter extends PagerAdapter {
    private List<ImageView> data;
    Context context;
    private List<ShopHomeBean.Data1> zxd;

    public ShopPaAdapter(List<ImageView> data, Context context, List<ShopHomeBean.Data1> zxd) {
        this.data = data;
        this.context = context;
        this.zxd = zxd;
    }

    @Override
    public int getCount() {
        //返回一个无穷大的值,
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {

        return arg0 == arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //注意,这里什么也不做!!!

    }

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        ImageView image = data.get(position % data.size());
        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
        ViewParent vp = image.getParent();
        if (vp != null) {
            ViewGroup vg = (ViewGroup) vp;
            vg.removeView(image);
        }
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                if (zxd.get(position % data.size()).getLinkurl().equals("3")) {
                    context.startActivity(new Intent(context, ShopGoodsWebActivity.class)
//                            .putExtra(ShopGoodsWebActivity.WEB_TITLE, zxd.get(position % data.size()).getTitle())
//                            .putExtra(ShopGoodsWebActivity.AD_ARTICLE_ID, zxd.get(position % data.size()).getID())
                            .putExtra(ShopGoodsWebActivity.GOODS_SHOP_URL, zxd.get(position % data.size()).getLinkurl())
                    );
//                } else {
//                    context.startActivity(new Intent(context, ContentActivity.class)
//                            .putExtra("id", zxd.get(position % data.size()).getID())
//                    );
//                }
                Log.e("PaAdapter", "点击图片");
            }
        });
        container.addView(data.get(position % data.size()));
        return data.get(position % data.size());
    }

}

实体类:

public class ShopHomeBean {
    private String errorCode;
    private List<Data1> data1;
    private List<Data2> data2;
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    public String getErrorCode() {
        return errorCode;
    }

    public void setData1(List<Data1> data1) {
        this.data1 = data1;
    }
    public List<Data1> getData1() {
        return data1;
    }

    public void setData2(List<Data2> data2) {
        this.data2 = data2;
    }
    public List<Data2> getData2() {
        return data2;
    }
    public static class Data1 {

        private String ID;
        private String imgurl;
        private String linkurl;
        public void setID(String ID) {
            this.ID = ID;
        }
        public String getID() {
            return ID;
        }

        public void setImgurl(String imgurl) {
            this.imgurl = imgurl;
        }
        public String getImgurl() {
            return imgurl;
        }

        public void setLinkurl(String linkurl) {
            this.linkurl = linkurl;
        }
        public String getLinkurl() {
            return linkurl;
        }

    }

    public class Data2 {

        private String ID;
        private String parent_ID;
        private String Channel_Name;
        private String Channel_Name_mobile;
        private String Channel_Name_English;
        private String Channel_icon;
        private String URL_GoTo;
        public void setID(String ID) {
            this.ID = ID;
        }
        public String getID() {
            return ID;
        }

        public void setParent_ID(String parent_ID) {
            this.parent_ID = parent_ID;
        }
        public String getParent_ID() {
            return parent_ID;
        }

        public void setChannel_Name(String Channel_Name) {
            this.Channel_Name = Channel_Name;
        }
        public String getChannel_Name() {
            return Channel_Name;
        }

        public void setChannel_Name_mobile(String Channel_Name_mobile) {
            this.Channel_Name_mobile = Channel_Name_mobile;
        }
        public String getChannel_Name_mobile() {
            return Channel_Name_mobile;
        }

        public void setChannel_Name_English(String Channel_Name_English) {
            this.Channel_Name_English = Channel_Name_English;
        }
        public String getChannel_Name_English() {
            return Channel_Name_English;
        }

        public void setChannel_icon(String Channel_icon) {
            this.Channel_icon = Channel_icon;
        }
        public String getChannel_icon() {
            return Channel_icon;
        }

        public void setURL_GoTo(String URL_GoTo) {
            this.URL_GoTo = URL_GoTo;
        }
        public String getURL_GoTo() {
            return URL_GoTo;
        }

    }
}

猜你喜欢

转载自blog.csdn.net/xiaoshuxgh/article/details/85071630