ViewPager加载图片自动无限轮播
首先看一下运行效果
主要目的:使用ImageLoader加载网络图片资源进行展示图片首页实现无限自动轮播的功能还有小圆点通过这一篇博客可以学到很多东西
目录结构只能说清晰啊
话不多说直接上代码
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(); } } 如果觉得对你有帮助,不妨小额打赏一下呗,钱多少无所谓,我看看有多少人支持