您的位置:首页 > 理论基础 > 计算机网络

ViewPager无限轮播,加载网络数据,ImageLoader加载图片并缓存到SD卡上

2017-11-08 10:21 597 查看
 

ViewPager无限轮播,加载网络数据,ImageLoader加载图片并缓存到SD卡上

原创 2017年08月22日 16:27:57

  首先要在清单文件里添加网络权限

 
<uses-permission android:name="android.permission.INTERNET"/>
引入.MyApplication
<application
android:name="com...imageloaderlistview.MyApplication"


  
导入一个依赖
compile files('libs/universal-image-loader-1.9.3-with-sources.jar')


  MainActivity

public class MainActivity extends AppCompatActivity {

    //全局变量

    ViewPager vp;

    List<Max.DataEntity.EssayEntity>  list=new ArrayList<Max.DataEntity.EssayEntity>();

    List<ImageView> listvp=new ArrayList<ImageView>();

    Handler handler;

    private GridView gv;

    private Myadapter adapters;

    private Max max;

    private MyViewPager adapter;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

       //找控件

        vp= (ViewPager) findViewById(R.id.vp);

        gv = (GridView) findViewById(R.id.gv);

       //调用加载数据的方法

        initData();

        //创建适配器

        adapters = new Myadapter();

        gv.setAdapter(adapters);

    }

   //异步任务

    private void initData() {

        new AsyncTask<String, String, String>() {

            @Override

            protected String doInBackground(String... strings) {

                //调用加载数据的方法

                getData();

                return null;

            }

            @Override

            protected void onPostExecute(String s) {

                //调用模拟ViewPager的方法

                 initvp();

                //刷新适配器

                adapters.notifyDataSetChanged();

                super.onPostExecute(s);

            }

        }.execute();

    }

       //ViewPager模拟数据

    private void initvp() {

        //模拟数据

        for (int i = 0; i <max.getData().getEssay().size() ; i++) {

            ImageView imageView=new ImageView(this);

            //自适应屏幕大小,FIT_XY是充满屏幕

           imageView.setScaleType(ImageView.ScaleType.FIT_XY);

            //ImageLoader加载图片

            ImageLoader.getInstance().displayImage(list.get(i).getAuthor_list().get(0).getWeb_url(),imageView);

            listvp.add(imageView);

        }

        //创建适配器

        adapter = new MyViewPager();

        vp.setAdapter(adapter);

        //利用 handler发送延迟消息

        handler = new Handler();

        handler.postDelayed(new Runnable() {

            @Override

            public void run() {

                int currentItem = vp.getCurrentItem();

                currentItem++;

                vp.setCurrentItem(currentItem);

                handler.postDelayed(this,2000);

            }

        },2000);

    }

    //加载网络数据

    private void getData() {

        try {

            URL url=new URL("http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            int code = conn.getResponseCode();

            if (code==200){

                //Gson解析

                Gson gson=new Gson();

                max = gson.fromJson(new InputStreamReader(conn.getInputStream()), Max.class);

                //最好把list写成全局,可节约内存

              //  List<Max.DataEntity.EssayEntity>  list=new ArrayList<Max.DataEntity.EssayEntity>();

                list= max.getData().getEssay();

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    //创建适配器

    public class  MyViewPager extends PagerAdapter{

        @Override

        public int getCount() {

           //返回Integer.MAX_VALUE便可实现无限轮播

            return Integer.MAX_VALUE;

        }

        @Override

        public boolean isViewFromObject(View view, Object object) {

            return view==object;

        }

        @Override

        public Object instantiateItem(ViewGroup container, int position) {

            position %=listvp.size();

            container.addView(listvp.get(position));

            return listvp.get(position);

        }

        @Override

        public void destroyItem(ViewGroup container, int position, Object object) {

            container.removeView((View) object);

        }

    }

    //创建的适配器

    public class  Myadapter extends BaseAdapter {

        @Override

        public int getCount() {

            return list.size();

        }

        @Override

        public Object getItem(int i) {

            return null;

        }

        @Override

        public long getItemId(int i) {

            return 0;

        }

        //优化

        @Override

        public View getView(int i, View view, ViewGroup viewGroup) {

            ViewHolder holder;

            if (view==null){

                view=View.inflate(MainActivity.this,R.layout.item,null);

                holder=new ViewHolder();

                holder.it1=(TextView) view.findViewById(R.id.it1);

                holder.iv=(ImageView) view.findViewById(R.id.iv);

                view.setTag(holder);

            }else {

                holder= (ViewHolder) view.getTag();

            }

            holder.it1.setText(list.get(i).getHp_title());

            // ImageLoader加载图片

            ImageLoader.getInstance().displayImage(list.get(i).getAuthor().get(0).getWeb_url(),holder.iv);

            return view;

        }

    }

    //帮助类

    static class ViewHolder{

        TextView it1,it2;

        ImageView iv;

    }

 }

  Application

 ImageLoader的初始化类

 

public class MyApplication extends Application{

    @Override

    public void onCreate() {

   

        super.onCreate();

        //指定路径

        File file = this.getCacheDir();

     

         //缓存到SD卡上

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this)

         // 自定义缓存路径

         .diskCache(new UnlimitedDiscCache(file))

         .build();

        ImageLoader.getInstance().init(config);

    }

}

Layout布局

<?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"

    >

    <android.support.v4.view.ViewPager

        android:id="@+id/vp"

   android:layout_width="match_parent"

   android:layout_height="200dp"

        ></android.support.v4.view.ViewPager>

    <GridView

        android:id="@+id/gv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:numColumns="2"

        android:columnWidth="90dp"

        android:stretchMode="columnWidth"

        android:layout_below="@+id/vp"

        ></GridView>

</RelativeLayout>

item布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    >

    <TextView

        android:id="@+id/it1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="哈哈"

        />

    <ImageView

        android:id="@+id/iv"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:src="@mipmap/ic_launcher"

        />

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: