ViewPager轮播图

布局文件:

<RelativeLayout
    android:id="@+id/rl_gallery"
    android:layout_width="match_parent"
    android:layout_height="200dp">
    <android.support.v4.view.ViewPager
        android:id="@+id/myViewPager"
        android:layout_width="match_parent"
        android:layout_height="200dp"></android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/ll_points"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="10dp"
        />
</RelativeLayout>
 
页面文件:
public class HomePage extends BaseFragment implements HomePageContract.IHomePageView,
        ViewPager.OnPageChangeListener {

    @BindView(R.id.ll_points)
    LinearLayout llHomePoint;
    @BindView(R.id.rl_gallery)
    RelativeLayout rlGallery;

    private int imgNum = 0;
    Context mContext;
    //轮播图用到的图片
    public static List<ImageView> lists = new ArrayList<ImageView>();
    HomePagePresenter presenter;
    List<BannerItem> bannerItems;
    private int index = 0;
    private int currentItem = 0;
    @BindView(R.id.myViewPager)
    ViewPager myViewPager;
    ViewPagerAdapter viewPagerAdapter;


    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.home_page, container, false);
        ButterKnife.bind(this, view);
        mContext = HomePage.this.getActivity();
        presenter = new HomePagePresenter();
        presenter.attachView(this);

        initAllData();
        return view;
    }

    public void initAllData(){
        //获取首页banner
        HomeBannerListData data = new HomeBannerListData(3);
        BjDataBody body = BJServerBodyUtils.getBjDataBody(data,false);
//        DialogHelper.showRoundProcessDialog(this.getActivity(), mContext.getString(R.string.data_loading), false);
        presenter.getBannerList(HttpConstant.HOME_PAGE,body);
    }

    public void initGallery() {
        lists.clear();
        viewPagerAdapter = new ViewPagerAdapter(bannerItems,mContext,llHomePoint);
        myViewPager.setAdapter(viewPagerAdapter);
        myViewPager.setOnPageChangeListener(this);
        myViewPager.setCurrentItem(0);
        initPoints();
        //每隔3秒自动播放
        Timer timer = new Timer();
        timer.schedule(task,5000,5000);
//        handler.sendEmptyMessageDelayed(3,3000);
    }

    /**
     * 定时器,实现自动播放
     */
    private TimerTask task = new TimerTask() {
        @Override
        public void run() {
            Message message = new Message();
            message.what = 3;
            index = myViewPager.getCurrentItem();
            index++;
            handler.sendMessage(message);
        }
    };

    private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            super.handleMessage(msg);
            switch (msg.what){
                case 3:
                    myViewPager.setCurrentItem(index);
                    break;
                default:
                    break;
            }
        }
    };

    //轮播图的圆点
    void initPoints() {
        llHomePoint.removeAllViews();
        for(int i=0;i<imgNum;i++){
            ImageView img = new ImageView(mContext);
            LinearLayout.LayoutParams margin = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            //设置每个小圆点距离左边的间距
            margin.setMargins(20,0,0,0);
            img.setLayoutParams(new ViewGroup.LayoutParams(22,22));
            if(i==0){
                img.setImageResource(R.drawable.icon_home_point_sel);
            }else{
                img.setImageResource(R.drawable.icon_home_point_nor);
            }

            llHomePoint.addView(img,margin);
        }
    }

    @Override
    public void showBannerList(BannerData data) {
        if(data != null){
            bannerItems = data.getAdvertlist();
            if(bannerItems != null && bannerItems.size() != 0){
                bannerItems.addAll(bannerItems);
                imgNum = bannerItems.size();
                initGallery();
            }
        }
    }

    @Override
    public void onFailure(Throwable e) {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        Logger.d("position="+position);
//        currentItem = position;
        if(position>imgNum-1){
            position = position%imgNum;
            currentItem = position;
        }
        for(int i=0;i<imgNum;i++){
            if(i == position){
//                llHomePoint.getChildAt(i).setBackgroundResource(R.drawable.icon_home_point_sel);
                Logger.d("sel"+position);
                ((ImageView)llHomePoint.getChildAt(i)).setImageResource(R.drawable.icon_home_point_sel);
            }else{
//                (llHomePoint.getChildAt(i)).setBackgroundResource(R.drawable.icon_home_point_nor);
                Logger.d("normal"+position);
                ((ImageView)llHomePoint.getChildAt(i)).setImageResource(R.drawable.icon_home_point_nor);
            }

        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

ViewPagerAdapter.java文件:
public class ViewPagerAdapter extends PagerAdapter{
    private List<BannerItem> bannerItems;
    private Context mContext;
    private LinearLayout ll_point;
    List<ImageView> imgs = new ArrayList<ImageView>();

    public ViewPagerAdapter(List<BannerItem> bannerItems, Context mContext, LinearLayout ll_point) {
        this.bannerItems = bannerItems;
        this.mContext = mContext;
        this.ll_point = ll_point;
        for(int i=0;i<bannerItems.size();i++){
            ImageView img = new ImageView(mContext);
            BannerItem item = bannerItems.get(i);
            ImageLoader.getInstance().displayImage(item.getBanner(),img);
            img.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
            img.setScaleType(ImageView.ScaleType.FIT_XY);
            imgs.add(img);
        }
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    public void destroyItem(ViewGroup container,int position,Object object){
//        container.removeView(imgs.get(position%imgs.size()));
//        if(position >= bannerItems.size()){
//            position = position%bannerItems.size();
//        }
//        container.removeView(imgs.get(position));
    }

    public Object instantiateItem(ViewGroup container,int position){
//        ImageView view = imgs.get(position%imgs.size());
        if(position >= bannerItems.size()){
            position = position%bannerItems.size();
        }
        ImageView view = imgs.get(position);
        //如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
        ViewParent vp = view.getParent();
        if(vp != null){
            ViewGroup viewGroup = (ViewGroup) vp;
            viewGroup.removeView(view);
        }
        container.addView(view);

        return view;//imgs.get(position%imgs.size());
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值