展会信息港展会大全

Android中的GridView图片异步加载
来源:互联网   发布日期:2015-10-03 10:47:20   浏览:1497次  

导读:Android中的GridView图片异步加载packageandroid.album.activity; importjava.io.File; importjava.util.ArrayList; importandroid.album.R; importandroid.album.core.AsyncLoadImage; importandroid.albu......

Android中的GridView图片异步加载

package android.album.activity;

import java.io.File;

import java.util.ArrayList;

import android.album.R;

import android.album.core.AsyncLoadImage;

import android.album.util.Listeners;

import android.album.util.MenuID;

import android.album.util.Public;

import android.album.util.UnitConverter;

import android.album.view.BorderImageView;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.Intent;

import android.graphics.Color;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.DisplayMetrics;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.AdapterContextMenuInfo;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageButton;

import android.widget.ImageView;

import android.widget.TextView;

/**

* ****************************************************************

* 文件名称 : ListFolderImages.java

* 创建时间 : 2011-7-9 15:00

* 文件描述 : 显示指定文件夹下的图片列表

* 编写人员 : Bryant

*****************************************************************

*/

public class ListFolderImagesActivity extends Activity implements

OnItemClickListener {

private ImageButton btnBack;

private TextView tvFolderName;

/**

* 文件夹下的图片列表

*/

private ArrayList<String> imageList = new ArrayList<String>();

private String folderPath;

private GridView gridview;

private ImageAdapter adapter;

private int screenWidth;

private int imageViewWidth;

private int imageViewHeight;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list_folder_images);

DisplayMetrics dm=new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

screenWidth = dm.widthPixels;

imageViewWidth = (screenWidth-UnitConverter.dip2px(this, 20)) / 3;

imageViewHeight = imageViewWidth;

Intent intent = getIntent();

folderPath = intent.getStringExtra("folderPath");

tvFolderName = (TextView) findViewById(R.id.tvFolderName);

tvFolderName.setText(intent.getStringExtra("folderName"));

// 返回

btnBack = (ImageButton) findViewById(R.id.btnBack);

btnBack.setOnTouchListener(Listeners.iBtnListener);

btnBack.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

ListFolderImagesActivity.this.finish();

}

});

startScanImageFolders();

gridview = (GridView) findViewById(R.id.grid_view);

adapter = new ImageAdapter(this);

gridview.setAdapter(adapter);

gridview.setOnItemClickListener(this);

registerForContextMenu(gridview);

}

public void startScanImageFolders(){

final ProgressDialog progressDialog = ProgressDialog

.show(ListFolderImagesActivity.this,ListFolderImagesActivity.this.getString(R.string.waiting),

ListFolderImagesActivity.this.getString(R.string.folder_scanning), false);

new Thread() {

public void run() {

imageList = getImagesFromFolder(folderPath);

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

progressDialog.dismiss();

}

}.start();

}

/**

* 获取指定文件夹中的图片

*

* @return

*/

public static ArrayList<String> getImagesFromFolder(String folderPath) {

ArrayList<String> imageList = new ArrayList<String>();

File file = new File(folderPath);

File[] files = file.listFiles(new ImageFileFilter());

for (File f : files) {

imageList.add(f.getPath());

}

return imageList;

}

public class ImageAdapter extends BaseAdapter {

private Context mContext;

public ImageAdapter(Context c) {

mContext = c;

}

public int getCount() {

return imageList.size();

}

public Object getItem(int position) {

return imageList.get(position);

}

public long getItemId(int position) {

return position;

}

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

final ImageView imageView;

imageView = new BorderImageView(mContext, Color.GRAY);

imageView.setLayoutParams(new GridView.LayoutParams(imageViewWidth, imageViewHeight));

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

convertView = imageView;

imageLoader.loadDrawable(imageList.get(position), new ImageCallback() {

public void imageLoaded(Drawable imageDrawable, String imageUrl) {

imageView.setImageDrawable(imageDrawable);

}

});

}

return convertView;

}

}

* 刷新UI

*/

final Handler handler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

adapter.notifyDataSetChanged();

break;

}

super.handleMessage(msg);

}

};

}

public class AsyncImageLoader {

private Map<String, SoftReference<Drawable>> imageCache=new HashMap<String, SoftReference<Drawable>>();

public Drawable loadDrawable(final String imageUrl,final ImageCallback callback){

if(imageCache.containsKey(imageUrl)){

SoftReference<Drawable> softReference=imageCache.get(imageUrl);

if(softReference.get()!=null){

return softReference.get();

}

}

final Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

callback.imageLoaded((Drawable) msg.obj, imageUrl);

}

};

new Thread(){

public void run() {

Drawable drawable=loadImageFromUrl(imageUrl);

imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));

handler.sendMessage(handler.obtainMessage(0,drawable));

};

}.start();

return null;

}

protected Drawable loadImageFromUrl(String imageUrl) {

try {

return Drawable.createFromPath(imageUrl);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public interface ImageCallback{

public void imageLoaded(Drawable imageDrawable,String imageUrl);

}

}

赞助本站

人工智能实验室

相关热词: GridView 异步加载

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港