天天看点

ViewPager加载图片自动无限轮播

首先看一下运行效果

ViewPager加载图片自动无限轮播

主要目的:使用ImageLoader加载网络图片资源进行展示图片首页实现无限自动轮播的功能还有小圆点通过这一篇博客可以学到很多东西

ViewPager加载图片自动无限轮播

目录结构只能说清晰啊

话不多说直接上代码

1首先使用GsonFormat插件直接封装好bean

2主布局

<?xml version="1.0" encoding="utf-8"?>
<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="match_parent"
    tools:context="com.yamade.alongstorm.testmontha.MainActivity">

    <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"></android.support.v4.view.ViewPager>

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="5dp"
            android:orientation="horizontal"
            android:padding="8dp" />
    </RelativeLayout>

</RelativeLayout>
      

然后做一个小圆点的帮助类,里边需要传四个参数

1上下文

2需要小圆点的viewpager

3绘制小圆点所在的线性布局

4小圆点的长度

package com.yamade.alongstorm.testmontha;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Alongstorm on 2017/8/23,0023.
 */
public class ViewPagerIndicator implements ViewPager.OnPageChangeListener {
    private Context context;
    private ViewPager viewPager;
    private LinearLayout dotLayout;
    private int size;
    private int img1 = R.mipmap.gouwuzy_16, img2 = R.mipmap.gouwuzy_17;
    private int imgSize = 15;
    private List<ImageView> dotViewLists = new ArrayList<>();

    public ViewPagerIndicator(Context context, ViewPager viewPager, LinearLayout dotLayout, int size) {
        this.context = context;
        this.viewPager = viewPager;
        this.dotLayout = dotLayout;
        this.size = size;

        for (int i = 0; i < size; i++) {
            ImageView imageView = new ImageView(context);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

            //为小圆点左右添加间距
            params.leftMargin = 10;
            params.rightMargin = 10;
            //手动给小圆点一个大小
            params.height = imgSize;
            params.width = imgSize;
            if (i == 0) {
                imageView.setBackgroundResource(img1);
            } else {
                imageView.setBackgroundResource(img2);
            }
            //为LinearLayout添加ImageView
            dotLayout.addView(imageView, params);
            dotViewLists.add(imageView);
        }

    }

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

    }

    @Override
    public void onPageSelected(int position) {
        for (int i = 0; i < size; i++) {
            //选中的页面改变小圆点为选中状态,反之为未选中
            if ((position % size) == i) {
                ((View) dotViewLists.get(i)).setBackgroundResource(img1);
            } else {
                ((View) dotViewLists.get(i)).setBackgroundResource(img2);
            }
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

下面是主Activity,这个就比较厉害了


       
package com.yamade.alongstorm.testmontha;

import android.os.AsyncTask;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.yamade.alongstorm.testmontha.bean.DataBean;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    ViewPager vp;
    DataBean db;
    List<DataBean> datas;
    MyAdapter adapter;
    List<String> pic;
    int lun;
    private boolean isAutoPlay;
    private LinearLayout ll;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        final Handler handler=new Handler();
        lun=0;
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                vp.setCurrentItem(lun);
                lun++;
                handler.postDelayed(this,1000);
            }
        }, 1000);
        vp.setOnPageChangeListener(new ViewPagerIndicator(this,vp,ll,6));
    }

    private void initData() {
        new AsyncTask<String, String, String>() {
            @Override
            protected String doInBackground(String... strings) {
                String res=getData();
                return res;
            }

            @Override
            protected void onPostExecute(String s) {
                Gson gson=new Gson();
                db=gson.fromJson(s,DataBean.class);
                datas.add(db);

                    for(int j=0;j<datas.get(0).getResult().getAdvs().size();j++) {
                        String pict=datas.get(0).getResult().getAdvs().get(j).getPic();
                        pic.add(pict);
                    }

                adapter=new MyAdapter();
                vp.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                super.onPostExecute(s);
            }
        }.execute("");
    }

    class MyAdapter extends PagerAdapter{

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

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

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            //若position超过mDataList.size(),会发生越界异常,所以这里每次超过size又从0开始计算位置
            position = position % pic.size();
            ImageView img=new ImageView(MainActivity.this);
            ImageLoader.getInstance().displayImage(pic.get(position),img);
            container.addView(img);
            return img;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            position = position % datas.size();
            container.removeView((View)object);
            // super.destroyItem(container, position, object);
        }
    }

    private void initView() {
        vp= (ViewPager) findViewById(R.id.vp);
        ll = (LinearLayout) findViewById(R.id.ll);
        datas=new ArrayList<DataBean>();
        pic=new ArrayList<String>();
    }

    public String getData() {
        String result="";
        String path="http://www.babybuy100.com/API/getShopOverview.ashx";
        try {
            URL url=new URL(path);
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setRequestMethod("GET");
            if (conn.getResponseCode()==200) {
                InputStream is = conn.getInputStream();
                ByteArrayOutputStream bos=new ByteArrayOutputStream();
                int len=-1;
                byte[] buff=new byte[1024];
                while((len=is.read(buff))!=-1){
                    bos.write(buff,0,len);
                }
                byte[] bytes=bos.toByteArray();
                result=new String(bytes);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

肯定还会有人问这个这个ImageLoader怎么用啊
直接对你们说了

       
package com.yamade.alongstorm.testmontha;

import android.app.Application;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

/**
 * Created by Alongstorm on 2017/8/23,0023.
 */
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        //初始化imageloader
        //1 使用一个默认的图片显示配置
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher)
                .displayer(new FadeInBitmapDisplayer(3000))
                .build();
        //2 初始化config配置
        ImageLoaderConfiguration configs=new ImageLoaderConfiguration.Builder(this)
                .threadPoolSize(4)//线程池的数量
                .memoryCacheExtraOptions(480,800)
                .defaultDisplayImageOptions(options)
                .build();
        ImageLoader.getInstance().init(configs);
        super.onCreate();
    }
}
如果觉得对你有帮助,不妨小额打赏一下呗,钱多少无所谓,我看看有多少人支持 
      
ViewPager加载图片自动无限轮播