Android 使用URL顯示網狀圖片

來源:互聯網
上載者:User

Android 使用URL顯示網狀圖片

 

 

URL對象中前而幾個方法都非常容易理解,而該對象提供的openStream()可以讀取該 URL資源的InputStream,通過該方法可以非常方便地讀取遠端資源。

下面的程式示範如何通過URL類讀取遠端資源:

1)只顯示網狀圖片

2)顯示並下載網狀圖片

 

1)只顯示網狀圖片

a) activity_main.xml

 

    

 

b)MainActivity.java

 

package dujun.king.urlgetimage;import java.io.InputStream;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;public class MainActivity extends Activity {Bitmap bitmap;    ImageView imageview;        Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            if (msg.what==0x9527) {                //顯示從網上下載的圖片            imageview.setImageBitmap(bitmap);            }        }              };        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imageview=(ImageView)findViewById(R.id.imageView1);             //建立並啟動一個新線程用於從網路上下載圖片        new Thread(){            @Override            public void run() {                try {                    //建立一個url對象                    URL url=new URL(http://www.baidu.com/img/bdlogo.png);                    //開啟URL對應的資源輸入資料流                    InputStream is= url.openStream();                    //從InputStream流中解析出圖片                    bitmap = BitmapFactory.decodeStream(is);                //  imageview.setImageBitmap(bitmap);                     //發送訊息,通知UI組件顯示圖片                    handler.sendEmptyMessage(0x9527);                    //關閉輸入資料流                    is.close();                } catch (Exception e) {                    e.printStackTrace();                }            }                  }.start();        }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}
c)AndroidMainifest.xml

 

 

                                                                                    

2)如果我們要顯示並下載網狀圖片,只需要將MainActivity.java檔案修改如下:

 

package dujun.king.urlgetimage;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.widget.ImageView;public class MainActivity extends Activity {Bitmap bitmap;    ImageView imageview;        Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            if (msg.what==0x9527) {                //顯示從網上下載的圖片            imageview.setImageBitmap(bitmap);            }        }              };        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imageview=(ImageView)findViewById(R.id.imageView1);             //建立並啟動一個新線程用於從網路上下載圖片        //這裡必須新起一個線程,Android後面的版本中,不允許在主線程中連網        new Thread(){            @Override            public void run() {                try {                    //建立一個url對象                    URL url=new URL(http://www.baidu.com/img/bdlogo.png);                    //開啟URL對應的資源輸入資料流                    InputStream is= url.openStream();                    //從InputStream流中解析出圖片                    bitmap = BitmapFactory.decodeStream(is);                //  imageview.setImageBitmap(bitmap);                     //發送訊息,通知UI組件顯示圖片                    handler.sendEmptyMessage(0x9527);                    //關閉輸入資料流                    is.close();                    //------------------------------                    //下載網狀圖片                    //再次開啟資源流                    is = url.openStream();                    //開啟手機對應的輸出資料流                    //存放在手機中,並命名為baidulogo.png                    OutputStream os = openFileOutput(baidulogo.png, MODE_WORLD_READABLE);                    byte[] buff = new byte[1024];                    int len = 0;                    //因為網路下載一般不可能一次下載完畢,我們將每次下載好的有效資料寫入                    while ((len = is.read(buff)) > 0)                    {                    os.write(buff,0,len);                    }                    //關閉流                    is.close();                    os.close();                } catch (Exception e) {                    e.printStackTrace();                }            }                  }.start();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}

 


參考文獻:瘋狂Android講義(第2版) 李剛編著

原文地址:http://blog.csdn.net/qingdujun/article/details/39271479

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.