- 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);
- }
- }
转载于:https://my.oschina.net/zhougui/blog/74227