Android圖片加載案例分享
HttpURLConnection和HttpClient都可以訪問網(wǎng)絡(luò),前者是Java的標(biāo)準類,后者是Apache的一個開源項目,兩者使用起來效果一樣,但后者更為簡單。
以下是針對前者完成的一個實例:
首先寫好布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
<EditText
android:id="@+id/et_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="請輸入圖片路徑"
android:src="@drawable/
android:maxLines="1" />
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="click" android:text="瀏覽" />
</LinearLayout>

界面交互
package cn.edu.bzu.imageviewdemo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
protected static final int CHANGE_UI = 1;
protected static final int ERROR = 2;
private EditText et_path;
private ImageView iv;
// 主線程創(chuàng)建消息處理器
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == CHANGE_UI){
Bitmap bitmap = (Bitmap) msg.obj;
iv.setImageBitmap(bitmap);
}else if(msg.what == ERROR){
Toast.makeText(MainActivity.this, "顯示圖片錯誤", 0).show();
}
};
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText) findViewById(R.id.et_path);
iv = (ImageView) findViewById(R.id.iv);
}
public void click(View view) {
final String path = et_path.getText().toString().trim();
if (TextUtils.isEmpty(path)) {
Toast.makeText(this, "圖片路徑不能為空", Toast.LENGTH_SHORT).show();
} else {
//子線程請求網(wǎng)絡(luò),Android4.0以后訪問網(wǎng)絡(luò)不能放在主線程中
new Thread() {
public void run() {
// 連接服務(wù)器 get 請求 獲取圖片.
try {
URL url = new URL(path); //創(chuàng)建URL對象
// 根據(jù)url 發(fā)送 http的請求.
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
// 設(shè)置請求的方式
conn.setRequestMethod("GET");
//設(shè)置超時時間
conn.setConnectTimeout(5000);
// 得到服務(wù)器返回的響應(yīng)碼
int code = conn.getResponseCode();
//請求網(wǎng)絡(luò)成功后返回碼是200
if (code == 200) {
//獲取輸入流
InputStream is = conn.getInputStream();
//將流轉(zhuǎn)換成Bitmap對象
Bitmap bitmap = BitmapFactory.decodeStream(is);
//iv.setImageBitmap(bitmap);
//TODO: 告訴主線程一個消息:幫我更改界面。內(nèi)容:bitmap
Message msg = new Message();
msg.what = CHANGE_UI;
msg.obj = bitmap;
handler.sendMessage(msg);
} else {
//返回碼不是200 請求服務(wù)器失敗
Message msg = new Message();
msg.what = ERROR;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg = new Message();
msg.what = ERROR;
handler.sendMessage(msg);
}
};
}.start();
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android常用的圖片加載庫
- Android Fresco圖片加載優(yōu)化的方案
- Android實現(xiàn)圖片加載進度提示
- Android框架Volley使用:ImageRequest請求實現(xiàn)圖片加載
- Android編程圖片加載類ImageLoader定義與用法實例分析
- Android基于Glide v4.x的圖片加載進度監(jiān)聽
- Android ListView實現(xiàn)ImageLoader圖片加載的方法
- Android中RecyclerView 滑動時圖片加載的優(yōu)化
- Android圖片加載框架Glide的基本用法介紹
- Android圖片加載利器之Picasso基本用法
- Android 官推 kotlin-first 的圖片加載庫——Coil的使用入門
相關(guān)文章
Android使用ExpandableListView實現(xiàn)三層嵌套折疊菜單
這篇文章主要介紹了Android使用ExpandableListView實現(xiàn)三層嵌套折疊菜單,對布局感興趣的同學(xué)可以參考下2021-04-04
詳解用RxJava實現(xiàn)事件總線(Event Bus)
本篇文章主要介紹了用RxJava實現(xiàn)事件總線(Event Bus),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
Android2.3實現(xiàn)SD卡與U盤自動掛載的方法
這篇文章主要介紹了Android2.3實現(xiàn)SD卡與U盤自動掛載的方法,較為詳細的分析了Android2.3實現(xiàn)SD卡與U盤自動掛載的具體步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02
Android原生ViewPager控件實現(xiàn)卡片翻動效果
這篇文章主要為大家詳細介紹了Android原生ViewPager控件實現(xiàn)卡片翻動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android實現(xiàn)聯(lián)動下拉框 下拉列表spinner的實例代碼
這篇文章介紹了Android實現(xiàn)聯(lián)動下拉框 下拉列表spinner的實例代碼,有需要的朋友可以參考一下2013-10-10
Android從源碼的角度徹底理解事件分發(fā)機制的解析(上)
這篇文章主要介紹了Android從源碼的角度徹底理解事件分發(fā)機制的解析,具有很好的參考價值,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
RecyclerView中使用CheckBox出現(xiàn)勾選混亂的解決方法
這篇文章主要為大家詳細介紹了RecyclerView中使用CheckBox出現(xiàn)勾選混亂的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

