異步加載圖片--狸菇涼_

簡單的異步加載圖片只需要兩個類就可以,一個mainactivity類,一個自己建的ImageloaderAsyncTask類。

ImageLoadAsyncTask

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

 

    /**

     * 定義一個圖片的接口回調

     */

    public interface ImageCallBack{

        void callBitmap(Bitmap bitmap);

    }

 

    //定義變量記住調用者所傳遞進來的回調監聽對象

    private ImageCallBack imageCallBack;

    //構造方法

    public ImageLoadAsyncTask(ImageCallBack imageCallBack){

        this.imageCallBack = imageCallBack;

 

    }

 

    @Override

    protected void onPostExecute(Bitmap bitmap) {

        super.onPostExecute(bitmap);

 

        if(bitmap != null){

            //設置圖片 回調回去

            imageCallBack.callBitmap(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(5*1000);

            connection.setReadTimeout(5*1000);

            //服務器響應

            int code = connection.getResponseCode();

            if(code == HttpURLConnection.HTTP_OK){//判斷服務器是否連接成功並相應

                //圖片流

                InputStream is = connection.getInputStream();

                //將圖片流轉化成Bitmap位圖,返回

                return BitmapFactory.decodeStream(is);

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

Mainactivity

private ImageView ivIcon;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        ivIcon = (ImageView) findViewById(R.id.ivIcon);

 

 

    }

 

    public  void btnLoadImage(View v){

 

        loadImg("http://20.1.3.46:8080/tomcat.png");

 

    }

 

    /**

     * 加載圖片

     * @param url  圖片地址

     */

    private void loadImg(String url){

 

 

        ImageLoadAsyncTask imageLoadAsyncTask = new ImageLoadAsyncTask(new ImageLoadAsyncTask.ImageCallBack() {

            @Override

            public void callBitmap(Bitmap bitmap) {

 

                if(bitmap != null){

                    ivIcon.setImageBitmap(bitmap);

                }

 

            }

        });

        //執行圖片請求

        imageLoadAsyncTask.execute(url);

 

 

    }

這就可以加載出來特別簡單的圖片了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章