无限轮播(从网络获取图片)

无限轮播

布局

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="wrap_content"
        android:layout_height="300dp"></android.support.v4.view.ViewPager>

    <RadioGroup
        android:id="@+id/radio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></RadioGroup>
</android.support.constraint.ConstraintLayout>

创建Appliaction

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration);

    }
}

主页面实现

public class MainActivity extends AppCompatActivity {

    private ViewPager pager;
    private List<ImageView> list=new ArrayList<>();

    Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pager = (ViewPager)findViewById(R.id.pager);

        getServerData();
    }

    private void getServerData() {
        MyAsyncTask task = new MyAsyncTask();
        task.execute();

    }

    private class MyAsyncTask extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... strings) {
            String path = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=banner";
            try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                if (conn.getResponseCode() == 200) {

                    InputStream inputStream = conn.getInputStream();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while ((len = inputStream.read(buffer)) != -1) {
                        bos.write(buffer, 0, len);
                    }
                    bos.close();
                    inputStream.close();
                    String json = bos.toString();
                    return json;
                }
            } catch (Exception e) {
                e.printStackTrace();
                Log.i("xxx", e.toString());
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            Log.i("xxx", s);

            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray banner = jsonObject.getJSONArray("banner");
                for (int i = 0; i < banner.length(); i++) {
                    JSONObject jsonObject1 = banner.getJSONObject(i);
                    String image_url = jsonObject1.getString("image_url");
                    //创建ImageView
                    ImageView imageView = new ImageView(MainActivity.this);
                    ImageLoader.getInstance().displayImage(image_url, imageView);

                    //把ImageView添加给集合
                    list.add(imageView);
                }

                MyViewPagerAdapter adapter = new MyViewPagerAdapter();
                pager.setAdapter(adapter);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

    //设置轮播图适配器
    private class MyViewPagerAdapter extends PagerAdapter{

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

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            position=position%list.size();
            ImageView imageView = list.get(position);
            container.addView(imageView);
            return imageView;
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView((View) object);
        }
    }


    private void startBanner(){
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                int currentItem = pager.getCurrentItem();
                currentItem++;
                pager.setCurrentItem(currentItem);
                handler.postDelayed(this,2000);
                
            }
        },2000);
    }

    private void stopBanner(){
        handler.removeCallbacksAndMessages(null);
    }

    //开始轮播
    @Override
    protected void onResume() {
        super.onResume();
        startBanner();
    }

    //停止轮播
    @Override
    protected void onPause() {
        super.onPause();
        stopBanner();
    }

    //处理handler造成的内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        stopBanner();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44310357/article/details/86560511