Gallery异步加载图片

Gallery异步加载图片

activity:
package org.hwq.gallery.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Gallery;

public class Gallery1Activity extends Activity {
public static HashMap<String,Bitmap> cache;//加载完毕的图片缓存到这里
private Gallery gallery;
private List<String> imgUrl;//加载到gallery中的所有图片路径
@Override
public void onCreate(Bundle savedInstanceState) {
//全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式
//横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
//没标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化操作
init();
}
/**
* 启动线程加载指定路径的图片到cache
* @param url
*/
public void loadImage(String url){
new Thread(new LoadImageThread(url,cache)).start();
}
/**
* 初始化下缓存cache
* 要加载到gallery中的图片路径
* 初始Gallery并设置其adapter
*/
public void init(){
cache = new HashMap<String, Bitmap>();
imgUrl = new ArrayList<String>();
imgUrl.add("http://fujian.xabbs.com/forum/201109/02/160646nn9hjjiimixvkxhe.jpg");
imgUrl.add("http://img1.cache.netease.com/catchpic/A/A9/A9D98040B397C366AE93E67871346561.jpg");
imgUrl.add("http://new.aliyiyao.com/UpFiles/Image/2011/01/13/nc_129393721364387442.jpg");
imgUrl.add("http://pic.viewpics.cn/2011/07/03/naichaMMzhangzetianzuixinzhaopian/18.jpg");
imgUrl.add("http://i1.sinaimg.cn/ent/m/c/2010-01-18/U1819P28T3D2847679F326DT20100118115712.jpg");
imgUrl.add("http://comic.sinaimg.cn/2011/0824/U5237P1157DT20110824161051.jpg");
imgUrl.add("http://t2.baidu.com/it/u=3142230130,2486626207&fm=52&gp=0.jpg");
imgUrl.add("http://t1.baidu.com/it/u=195272205,3957438954&fm=52&gp=0.jpg");
imgUrl.add("http://t2.baidu.com/it/u=2728825411,1745149447&fm=52&gp=0.jpg");
imgUrl.add("http://t3.baidu.com/it/u=4049625789,880707762&fm=52&gp=0.jpg");
imgUrl.add("http://t2.baidu.com/it/u=251271316,3044182410&fm=51&gp=0.jpg");
imgUrl.add("http://t2.baidu.com/it/u=1909869261,3407648852&fm=51&gp=0.jpg");
imgUrl.add("http://t2.baidu.com/it/u=3904233276,4064970722&fm=52&gp=0.jpg");
imgUrl.add("http://t3.baidu.com/it/u=179128931,289390833&fm=52&gp=0.jpg");
imgUrl.add("http://t3.baidu.com/it/u=67631552,1181502930&fm=52&gp=0.jpg");
imgUrl.add("http://t1.baidu.com/it/u=3156928874,2848088324&fm=51&gp=0.jpg");
imgUrl.add("http://t1.baidu.com/it/u=382878650,3995372735&fm=51&gp=0.jpg");
gallery = (Gallery) findViewById(R.id.gallery1);
ImageAdapter adapter = new ImageAdapter(this, imgUrl);
gallery.setAdapter(adapter);
}

}


Galleryd的自定义ImageAdapter:
package org.hwq.gallery.activity;

import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter{
private List<String> imgUrl;
private Context context;

public ImageAdapter(Context context,List<String> imgUrl){
this.imgUrl = imgUrl;
this.context = context;
}

public int getCount() {
return imgUrl.size();
}

public Object getItem(int position) {
return imgUrl.get(position);
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
//从前面定义的cache中找到该路径下的图片
Bitmap map = Gallery1Activity.cache.get(imgUrl.get(position));
imageView.setLayoutParams(new Gallery.LayoutParams(800,400));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
if(map == null){
//如果没加载的,则显示默认图片
imageView.setImageResource(R.drawable.ic_launcher);
//如果没有加载,则启动线程其加载
((Gallery1Activity)context).loadImage(imgUrl.get(position));
}else{
//如果加载了的,则设置到Imageview
imageView.setImageBitmap(map);
}
return imageView;
}

}


加载图片线程LoadImageThread.java
package org.hwq.gallery.activity;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class LoadImageThread implements Runnable{
private String imageUrl;
HashMap<String,Bitmap> cache;
LoadImageThread(String url,HashMap<String,Bitmap> cache){
this.imageUrl = url;
this.cache = cache;
}
public void run(){
try {
System.out.println("开始加载"+imageUrl);
//将指定的路径下的图片加载到定义的cache当中去
InputStream imageStream = new URL(imageUrl).openStream();
Bitmap map = BitmapFactory.decodeStream(imageStream);
cache.put(imageUrl, map);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

例中使用到了URL,所以需要在AndroidManifest.xml添加相应的网络权限
<uses-permission android:name="android.permission.INTERNET"/>


OK,完事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值