banner轮播图

来源:互联网 发布:龙虎榜数据每天几点出 编辑:程序博客网 时间:2024/05/17 02:28

Mainactivity

package com.example.bannerdemo;

import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
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 com.example.bannerdemo.utils.LoadImageAsyncTask;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ViewPager vp;
    private List<String> imgeAddress = new ArrayList<String>();
    private int index = 0;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            //UI操作

            switch (msg.what){
                case 1:
                {
                    //界面切换
                    vp.setCurrentItem(index);
                }
                    break;
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //准备好网络图片地址
        imgeAddress.add("http://img.juhe.cn/cookbook/s/1/45_c25e0cedd2012f45.jpg");
        imgeAddress.add("http://img.juhe.cn/cookbook/s/1/45_eb68327980f022dd.jpg");
        imgeAddress.add("http://img.juhe.cn/cookbook/s/1/45_8e0cf83cb7306281.jpg");



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

        //设置适配器
        vp.setAdapter(new MyPageAdapter());

        //开始轮播
       autoPlay();

    }


    class MyPageAdapter extends PagerAdapter{


        @Override
        public int getCount() {
            return Integer.MAX_VALUE;//2的31次方减1
        }

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

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


        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            //产生一个条目,添加到显示容器里
            final ImageView imageView = new ImageView(MainActivity.this);


            new LoadImageAsyncTask(new LoadImageAsyncTask.ImageCallBackListener() {
                @Override
                public void imageCallBack(Bitmap bitmap) {
                    System.out.println("回调了--->");
                    if(bitmap != null){
                        imageView.setImageBitmap(bitmap);
                   }else{
                        imageView.setImageResource(R.mipmap.ic_launcher);
                   }

                }//position % imgeAddress.size() 这个是取模,//position ++ 2的31 减一次方为止  0,1,2
            }).execute(imgeAddress.get(position % imgeAddress.size()));

            //添加到container
            container.addView(imageView);
            return imageView;
        }
    }


    /**
     * 轮播
     */
    private void autoPlay(){


        new Thread(){
            @Override
            public void run() {
                super.run();

                while (true){

                    index++;//index++ 1  ++index  1-> 2
                    //vp.setCurrentItem(index % imgeAddress.size());
                    int index1 = index % imgeAddress.size();
                    System.out.println("循环 : "+index1);
                    try { Thread.sleep(3000);} catch (InterruptedException e) { e.printStackTrace(); }//sleep 睡觉 UI不工作了

                    //发送消息
                    handler.sendEmptyMessage(1);
                }
            }
        }.start();


    }
}

LoadImageAsyncTask 获取图片


package com.example.bannerdemo.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by rookie on 2017/7/11.
 */

public class LoadImageAsyncTask extends AsyncTask<String,Void,Bitmap> {


    //1.定义一个监听(接口)
    public interface ImageCallBackListener{

        void imageCallBack(Bitmap bitmap);

    }


    //构造方法
    public LoadImageAsyncTask(ImageCallBackListener imageCallBackListener){
        this.imageCallBackListener = imageCallBackListener;
    }

    //定义变量接收调用者所传递过来的监听对象
    private ImageCallBackListener imageCallBackListener;




    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        System.out.println("数据解析完成-->");
        //回调图片对象
        imageCallBackListener.imageCallBack(bitmap);

    }

    @Override
    protected Bitmap doInBackground(String... params) {

        try {
            String path = params[0];
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            //服务器响应
            int code = connection.getResponseCode();
            if(code == HttpURLConnection.HTTP_OK){

                InputStream is = connection.getInputStream();

                return BitmapFactory.decodeStream(is);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}


原创粉丝点击