使用AsyncTask自定义图片加载类

来源:互联网 发布:软件无线电技术与实现 编辑:程序博客网 时间:2024/05/23 14:23
/** * Created by qizepu on 2017/4/15. * 创建一个类  继承AsyncTask  用来加载图片  参数类型是String  返回类型是Bitmap */public class LoadImageActivity extends AsyncTask<String,Void,Bitmap> {    //定义一个图片的接口   用于回调    public interface ImageCallBack{        void getBitmap(Bitmap bitmap);    }    //定义变量记住调用者所传递进来的回调监听对象    private ImageCallBack imageCallBack;    //创建构造方法    public LoadImageActivity(ImageCallBack imageCallBack){        this.imageCallBack=imageCallBack;    }    //重写方法    @Override    protected void onPostExecute(Bitmap bitmap) {        super.onPostExecute(bitmap);        //设置图片 回调回去        if (bitmap != null){            imageCallBack.getBitmap(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);            //判断服务器是否连接成功并响应            if (connection.getResponseCode() == 200){                //得到图片流                InputStream is = connection.getInputStream();                ////将图片流转化成Bitmap位图,返回                Bitmap bitmap = BitmapFactory.decodeStream(is);                return bitmap;            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return null;    }}调用public class MainActivity extends AppCompatActivity {    private ImageView image;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        image = (ImageView) findViewById(R.id.image_1);    }    //点击事件  加载图片    public void loadImages(View view){        loadImage();    }    public void loadImage(){        //实例化LoadImageActivity类  实现其接口的方法        LoadImageActivity loadImageActivity = new LoadImageActivity(new LoadImageActivity.ImageCallBack() {            @Override            public void getBitmap(Bitmap bitmap) {                if (bitmap != null){                    image.setImageBitmap(bitmap);                }            }        });        //输入图片地址        loadImageActivity.execute("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2200875053,59610386&fm=23&gp=0.jpg");    }}

0 0