android-smart-image-view圖片載入簡單使用
這個工具類是帶快取功能的圖片載入工具類,它自己會在新執行緒中進行操作。
下載地址:工具類下載地址
1.首先將工具類的com資料夾拷貝到工程中。
2.圖片元件不再用ImageView,而是使用com.loopj.android.image.SmartImageView
3.呼叫contentIV.setImageUrl("","","")進行載入圖片 也可以不設定後面的兩個引數
第一個引數:圖片的Url
第二個引數:圖片地址錯誤時候顯示的圖片
第三個引數:圖片正在載入的時候顯示的圖片
4.如果使用自定義載入圖片工具類的話,記得配置外儲存裝置的寫許可權,因為快取的時候會是將圖片快取到SD卡上了。如果使用SmartImageView就不需要配置了,因為它快取到了當前應用包下。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
import com.loopj.android.image.SmartImageView;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private EditText pathET;
// private ImageView contentIV;
private NetService service;
private Handler handler = new Handler();
private SmartImageView contentIV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
service = new NetService();
pathET = (EditText) findViewById(R.id.pathET);
contentIV = (SmartImageView) findViewById(R.id.contentIV);
}
public void go(View view){
/*
* 第一個引數:圖片的Url
* 第二個引數:圖片地址錯誤時候顯示的圖片
* 第三個引數:圖片正在載入的時候顯示的圖片
*/
contentIV.setImageUrl(pathET.getText().toString(),android.R.drawable.ic_delete,android.R.drawable.ic_popup_sync);
//註釋是使用自定義載入圖片的工具類,如果使用SmartImageView 上面一句話即可。
/*new Thread(){
public void run() {
try {
String path = pathET.getText().toString();
final Bitmap bitmap = service.getImage(path);
handler.post(new Runnable() {
@Override
public void run() {
contentIV.setImageBitmap(bitmap);
}
});
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "伺服器忙!", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
};
}.start();*/
}
}
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
/**
* 自定義快取並顯示圖片的類
* @author Administrator
*
*/
public class NetService {
public Bitmap getImage(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
File file = new File("/mnt/sdcard/"+URLEncoder.encode(path,"UTF-8"));
if(file.exists()){//如果該檔案存在,則在訊息頭上加上此檔案最後修改日期,讓它和伺服器上的檔案的最後修改日期進行對比,如果不一樣則要進行載入,如果一樣則使用快取
conn.setIfModifiedSince(file.lastModified());
}
int code = conn.getResponseCode();
if(code==200){
InputStream is = conn.getInputStream();
int len = 0;
byte[] buff = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len=is.read(buff))!=-1){
bos.write(buff, 0, buff.length);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(bos.toByteArray(), 0, bos.toByteArray().length);
FileOutputStream fos = new FileOutputStream(file);
fos.write(bos.toByteArray());
fos.close();
bos.close();
is.close();
return bitmap;
}else if(code==304){//如果最後修改日期一樣,則使用本地快取檔案
return BitmapFactory.decodeFile(file.getAbsolutePath());
}
throw new RuntimeException("返回圖片異常");
}
}
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.xxc.nettext.MainActivity$PlaceholderFragment" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/pathET"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textUri" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="go"
android:text="GO" />
</LinearLayout>
<com.loopj.android.image.SmartImageView
android:id="@+id/contentIV"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
相關文章
- Fresco圖片載入的簡單應用
- 單張圖片懶載入
- Android兩種簡單的載入GIF圖片的方法Android
- Android開發教程 - 使用Data Binding(七)使用BindingAdapter簡化圖片載入AndroidAPT
- 圖片懶載入
- 圖片載入事件事件
- 預載入圖片
- Flutter 圖片載入Flutter
- 圖片預載入和懶載入
- Android圖片載入框架Fresco使用詳解Android框架
- 載入失敗使用預設圖片替代
- 載入本地圖片模糊,Glide載入網路圖片卻很清晰地圖IDE
- TestFlight下載App,載入圖片失效。Xcode安裝App,圖片載入正常。APPXCode
- 圖片懶載入(IntersectionObserver)Server
- glide圖片載入原理IDE
- 圖片懶載入原理
- Android 圖片載入框架Android框架
- 載入遠端圖片
- 實現簡單的輪播圖(單張圖片、多張圖片)
- iOS8 Framework使用載入xib及圖片iOSFramework
- Vue圖片懶載入之lazyload外掛使用Vue
- Android9.0使用Glide載入圖片問題AndroidIDE
- 攻防世界-簡單的圖片
- 圖片處理擴充套件 Grafika 的簡單使用套件
- 圖片預載入,圖片懶載入,和jsonp中的一個疑問JSON
- 圖片懶載入踩坑
- Android 高效安全載入圖片Android
- 解耦圖片載入庫解耦
- 圖片懶載入大白話
- 通用圖片載入元件UniversalImageLoader元件
- Js圖片懶載入(lazyload)JS
- Flutter載入圖片與GlideFlutterIDE
- 圖片懶載入實現
- 使用jpeg圖片庫,顯示圖片並簡單實現LCD的觸屏功能
- 圖片下載 (hqm精簡版)
- 圖形影像處理之簡單圖片
- CNN-簡單圖片分類CNN
- web前端入門到實戰:簡單的圖片輪播Web前端
- 圖片處理擴充套件 Intervention/image 的簡單使用套件