Android中的GridView图片异步加载
16lz
2022-03-15
- packageandroid.album.activity;
- importjava.io.File;
- importjava.util.ArrayList;
- importandroid.album.R;
- importandroid.album.core.AsyncLoadImage;
- importandroid.album.util.Listeners;
- importandroid.album.util.MenuID;
- importandroid.album.util.Public;
- importandroid.album.util.UnitConverter;
- importandroid.album.view.BorderImageView;
- importandroid.app.Activity;
- importandroid.app.ProgressDialog;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.graphics.Color;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.util.DisplayMetrics;
- importandroid.view.ContextMenu;
- importandroid.view.ContextMenu.ContextMenuInfo;
- importandroid.view.Menu;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.view.ViewGroup;
- importandroid.widget.AdapterView;
- importandroid.widget.AdapterView.AdapterContextMenuInfo;
- importandroid.widget.AdapterView.OnItemClickListener;
- importandroid.widget.BaseAdapter;
- importandroid.widget.GridView;
- importandroid.widget.ImageButton;
- importandroid.widget.ImageView;
- importandroid.widget.TextView;
- /**
- *****************************************************************
- *文件名称:ListFolderImages.java
- *创建时间:2011-7-915:00
- *文件描述:显示指定文件夹下的图片列表
- *编写人员:Bryant
- *****************************************************************
- */
- publicclassListFolderImagesActivityextendsActivityimplements
- OnItemClickListener{
- privateImageButtonbtnBack;
- privateTextViewtvFolderName;
- /**
- *文件夹下的图片列表
- */
- privateArrayList<String>imageList=newArrayList<String>();
- privateStringfolderPath;
- privateGridViewgridview;
- privateImageAdapteradapter;
- privateintscreenWidth;
- privateintimageViewWidth;
- privateintimageViewHeight;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.list_folder_images);
- DisplayMetricsdm=newDisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- screenWidth=dm.widthPixels;
- imageViewWidth=(screenWidth-UnitConverter.dip2px(this,20))/3;
- imageViewHeight=imageViewWidth;
- Intentintent=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(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- ListFolderImagesActivity.this.finish();
- }
- });
- startScanImageFolders();
- gridview=(GridView)findViewById(R.id.grid_view);
- adapter=newImageAdapter(this);
- gridview.setAdapter(adapter);
- gridview.setOnItemClickListener(this);
- registerForContextMenu(gridview);
- }
- publicvoidstartScanImageFolders(){
- finalProgressDialogprogressDialog=ProgressDialog
- .show(ListFolderImagesActivity.this,ListFolderImagesActivity.this.getString(R.string.waiting),
- ListFolderImagesActivity.this.getString(R.string.folder_scanning),false);
- newThread(){
- publicvoidrun(){
- imageList=getImagesFromFolder(folderPath);
- Messagemessage=newMessage();
- message.what=1;
- handler.sendMessage(message);
- progressDialog.dismiss();
- }
- }.start();
- }
- /**
- *获取指定文件夹中的图片
- *
- *@return
- */
- publicstaticArrayList<String>getImagesFromFolder(StringfolderPath){
- ArrayList<String>imageList=newArrayList<String>();
- Filefile=newFile(folderPath);
- File[]files=file.listFiles(newImageFileFilter());
- for(Filef:files){
- imageList.add(f.getPath());
- }
- returnimageList;
- }
- publicclassImageAdapterextendsBaseAdapter{
- privateContextmContext;
- publicImageAdapter(Contextc){
- mContext=c;
- }
- publicintgetCount(){
- returnimageList.size();
- }
- publicObjectgetItem(intposition){
- returnimageList.get(position);
- }
- publiclonggetItemId(intposition){
- returnposition;
- }
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- if(convertView==null){
- finalImageViewimageView;
- imageView=newBorderImageView(mContext,Color.GRAY);
- imageView.setLayoutParams(newGridView.LayoutParams(imageViewWidth,imageViewHeight));
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- convertView=imageView;
- imageLoader.loadDrawable(imageList.get(position),newImageCallback(){
- publicvoidimageLoaded(DrawableimageDrawable,StringimageUrl){
- imageView.setImageDrawable(imageDrawable);
- }
- });
- }
- returnconvertView;
- }
- }
- *刷新UI
- */
- finalHandlerhandler=newHandler(){
- publicvoidhandleMessage(Messagemsg){
- switch(msg.what){
- case1:
- adapter.notifyDataSetChanged();
- break;
- }
- super.handleMessage(msg);
- }
- };
- }
- publicclassAsyncImageLoader{
- privateMap<String,SoftReference<Drawable>>imageCache=newHashMap<String,SoftReference<Drawable>>();
- publicDrawableloadDrawable(finalStringimageUrl,finalImageCallbackcallback){
- if(imageCache.containsKey(imageUrl)){
- SoftReference<Drawable>softReference=imageCache.get(imageUrl);
- if(softReference.get()!=null){
- returnsoftReference.get();
- }
- }
- finalHandlerhandler=newHandler(){
- @Override
- publicvoidhandleMessage(Messagemsg){
- callback.imageLoaded((Drawable)msg.obj,imageUrl);
- }
- };
- newThread(){
- publicvoidrun(){
- Drawabledrawable=loadImageFromUrl(imageUrl);
- imageCache.put(imageUrl,newSoftReference<Drawable>(drawable));
- handler.sendMessage(handler.obtainMessage(0,drawable));
- };
- }.start();
- returnnull;
- }
- protectedDrawableloadImageFromUrl(StringimageUrl){
- try{
- returnDrawable.createFromPath(imageUrl);
- }catch(Exceptione){
- thrownewRuntimeException(e);
- }
- }
- publicinterfaceImageCallback{
- publicvoidimageLoaded(DrawableimageDrawable,StringimageUrl);
- }
- }
更多相关文章
- android图片切换ImageSwichter的动画切换效果
- Android(安卓)studio图片ERROR: 9-patch image xx .9.png malfor
- Android(安卓)桌面快捷方式操作
- Android(安卓)DrawBitmap绘制图像
- Android(安卓)加载图片传到另一个页面 关于回调
- android gallery笔记
- android截屏并将截图缩放
- Android创建和删除桌面快捷方式
- Android(安卓)实现旋转键盘的例子