1.写一个从网络加载图片的工具类:

新建一个类,继承 AppCompatImageView


public class NetImageView extends AppCompatImageView {
   Handler handler=new Handler(new Handler.Callback() {
       @Override
       public boolean handleMessage(Message message) {
            if (message.what==1){
                setImageBitmap((Bitmap) message.obj);
            }
           return false;
       }
   });
    public NetImageView(Context context) {
        super(context);
    }

    public NetImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NetImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setImageURL(final String path){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url=new URL(path);
                    HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(10000);
                    connection.setConnectTimeout(10000);
                    if (connection.getResponseCode()==200){
                        InputStream inputStream=connection.getInputStream();
                        Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
                        Message message=new Message();
                        message.obj=bitmap;
                        message.what=1;
                        handler.sendMessage(message);
                    }
                    else {
                        handler.sendEmptyMessage(2);
                    }

                } catch (Exception e) {
                    handler.sendEmptyMessage(3);
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

2、在主界面添加ViewPager布局

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

3、添加一个Layout界面

这个界面专门用来放需要重复显示的部分,我这里只放了一个图片控件。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<com.example.myapp.view_pager.NetImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ivNetImg"/>
</LinearLayout>

4、添加ViewPager的适配器

public class MyPagerAdapter extends PagerAdapter {
    private List<View> viewList=new ArrayList<>();//用来存放布局
    private List<String> imgURL=new ArrayList<>();//用来存放图片的链接
    public MyPagerAdapter(List<View> viewList, List<String> imgURL) {//通过构造方法传入数据
        this.viewList = viewList;
        this.imgURL = imgURL;
    }
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
       View view=viewList.get(position);//通过position找到对应的布局
       NetImageView imageView=view.findViewById(R.id.ivNetImg);//通过findViewById找到相对应布局的控件
       imageView.setImageURL(imgURL.get(position));//给图片控件设置图片的地址
       container.addView(view);//添加这个布局
       return view;
    }
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
       container.removeView(viewList.get(position));//
    }
    @Override
    public int getCount() {
        return viewList.size();
    }
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
        return view==o;
    }
}

4、在MainActivity实例化控件


public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager=findViewById(R.id.viewPage);
        List <View> viewList=new ArrayList<>();
        List<String> imgURL=new ArrayList<>();
            for (int i = 1; i <=4; i++) {//通过循环添加view和图片的链接
                View view = LayoutInflater.from(this).inflate(R.layout.img_layout, null);
                imgURL.add("http://xiaosiqi.me/img/img"+i+".jpg");
                viewList.add(view);
            }
        MyPagerAdapter myPagerAdapter=new MyPagerAdapter(viewList,imgURL);
        viewPager.setAdapter(myPagerAdapter);
    }
}

5、完成的效果


学习永不止步