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);
}
}
Comments | NOTHING