图片的异步加载
默认图片: 加载上的图片:
布局文件:activity_show_image.xml文件内容
<RelativeLayout 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:background="@drawable/activity_background">
<TextView
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@drawable/theme_title_red"
android:gravity="center_vertical|center_horizontal"
android:textSize="20dip"
android:text="图片异步加载"
tools:context=".ShowImageActivity" />
<ImageView
android:id="@+id/img1"
android:layout_width="200dip"
android:layout_height="200dip"
android:layout_below="@+id/title_bar"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dip"
android:background="@drawable/coner_img_bg"
android:padding="5dip"
android:src="@drawable/b" />
</RelativeLayout>
2.核心代码:
ShowImageActivity.xml文件内容:
package com.jun.activity;
import java.io.IOException;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Menu;
import android.widget.ImageView;
public class ShowImageActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_image);
loadImage2("http://www.baidu.com/img/baidu_logo.gif", R.id.img1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_show_image, menu);
return true;
}
final Handler handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
((ImageView) ShowImageActivity.this.findViewById(msg.arg1))
.setImageDrawable((Drawable) msg.obj);
}
};
// 采用handler+Thread模式实现多线程异步加载
private void loadImage2(final String url, final int id) {
Thread thread = new Thread() {
@Override
public void run() {
Drawable drawable = null;
try {
drawable = Drawable.createFromStream(
new URL(url).openStream(), "image.png");
} catch (IOException e) {
Log.d("test", e.getMessage());
}
// 模拟网络延时
SystemClock.sleep(2000);
Message message = handler2.obtainMessage();
message.arg1 = id;
message.obj = drawable;
handler2.sendMessage(message);
}
};
thread.start();
thread = null;
}
}
3.注意:要在配置文件 Manifest.xml文件中加入访问互联网权限信息:
<uses-permission android:name="android.permission.INTERNET"/>
4.上面使用的是Handler+Thread+Message模式
这种模式使用了线程,所以可以看到异步加载的效果。
5.如果使用了Handler+Runnable模式
加载图片都是在主线程中进行的,加载图片时候会阻塞Activity默认图片的显示,而是加载完成后,才显示图片至于该种模式为何在主线程中进行加载可以参照: http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038516.html
更多相关文章
- Android(安卓)中保存图片的代码
- Android广告轮播
- 获取Bitmap和对Bitmap的操作工具类
- android接入高德路线规划之驾车模式
- android 图片手势放大缩小
- AsyncTask的使用 (二)图片下载,进度条
- Android(安卓)控件之进度加载
- Android关于图片和Base64转码的工具类
- Android(安卓)ListView 滑到最后一条自动加载