安卓学习历程-第三天
来源:互联网 发布:香港崇光sogo mac 编辑:程序博客网 时间:2024/06/11 00:53
参照网上代码,使用AsyncTask和Adapter实现图片异步加载
继承BaseAdapter类自定义Adapter类
使用mLayoutInFlater实现动态加载布局
使用getTag()与setTag()优化Item的加载
private Context mContext; private LayoutInflater mLayoutInFlater=null; private List<String> mList=null; private int width=120; private int height=150; public static class MyGridViewHolder{ public ImageView imageview_thumbnail; public TextView textview_test; } public MyGridViewAdapter(Context context,List<String> list){ this.mContext=context; this.mList=list; mLayoutInFlater= LayoutInflater.from(context); } @Override public int getCount(){ return mList.size(); } @Override public Object getItem(int arg0){ return null; } @Override public long getItemId(int position){ return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { MyGridViewHolder viewHolder = null; if (convertView == null) { viewHolder = new MyGridViewHolder(); convertView = mLayoutInFlater.inflate(R.layout.layout_my_gridview_item, null); viewHolder.imageview_thumbnail = (ImageView) convertView.findViewById(R.id.imageview_thumbnail); viewHolder.textview_test = (TextView) convertView.findViewById(R.id.textview_test); convertView.setTag(viewHolder); } else viewHolder = (MyGridViewHolder) convertView.getTag(); String url=mList.get(position); //需要加载的图片已经在加载,不用添加线程加载 //如果不是加载需要的图片,取消线程,创建线程加载需要的图片 if(cancelPotentialLoad(url,viewHolder.imageview_thumbnail)){ AsyncLoadImageTask task=new AsyncLoadImageTask(viewHolder.imageview_thumbnail); //创建线程 加载图片 LoadedDrawable loadedDrawable=new LoadedDrawable(task); //记录加载任务 viewHolder.imageview_thumbnail.setImageDrawable(loadedDrawable); //设置图片 task.execute(position); } viewHolder.textview_test.setText((position+1)+""); //设置文本 return convertView; }
使用AsyncTask异步加载图片,并自定义函数检测,防止多个线程同时加载图片
private class AsyncLoadImageTask extends AsyncTask<Integer,Void,Bitmap> { private String url=null; private final WeakReference<ImageView> imageViewWeakReference; public AsyncLoadImageTask(ImageView imageview){ super(); imageViewWeakReference=new WeakReference<ImageView>(imageview); } protected Bitmap doInBackground(Integer... params){ //将图片和地址存入map Bitmap bitmap=null; this.url=mList.get(params[0]); bitmap=getBitmapFromUrl(url); //获取图片 MainActivity.gridviewBitmapCaches.put(mList.get(params[0]),bitmap); return bitmap; } protected void onPostExecute(Bitmap resultBitmap){ //将图片放入imageview?? if(isCancelled()){ resultBitmap=null; } if(imageViewWeakReference!=null){ ImageView imageView=imageViewWeakReference.get(); AsyncLoadImageTask loadImageTask=getAsyncLoadImageTask(imageView); if(this==loadImageTask){ imageView.setImageBitmap(resultBitmap); imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); } } super.onPostExecute(resultBitmap); } }
定义函数压缩图片,节约内存
public static Bitmap getBitmapThumbnail(String path, int width, int height) { Bitmap bitmap = null; BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, opts); opts.inSampleSize = Math.max((int) (opts.outHeight / (float) height), (int) (opts.outWidth / (float) width)); opts.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeFile(path, opts); return bitmap; } public static Bitmap getBitmapThumbnail(Bitmap bmp,int width,int height){ Bitmap bitmap=null; if(bmp!=null){ int bmpWidth=bmp.getWidth(); int bmpHeight=bmp.getHeight(); if(width!=0&&height!=0){ Matrix matrix=new Matrix(); float scaleWidth=((float)width/bmpWidth); float scaleHeight=((float)height/bmpHeight); matrix.postScale(scaleWidth,scaleHeight); bitmap=Bitmap.createBitmap(bmp,0,0,bmpWidth,bmpHeight,matrix,true); } else{ bitmap=bmp; } } return bitmap; }
文章摘自:
http://blog.csdn.net/jia516967927/article/details/50730502
阅读全文
0 0
- 安卓学习历程-第三天
- 安卓学习第三天
- 安卓学习第三天
- [安卓基础]学习第三天
- 安卓学习历程-第一天
- 安卓学习历程-第五天
- 安卓培训第三天
- 我的iOS学习历程 - OC第三天
- 安卓学习历程(1)
- Stephen的蓝牙&安卓学习历程
- 安卓学习历程-第二天
- 安卓学习历程-第四天
- 安卓--第三天--Listview的实现方法详细分析
- 学习CRYPTO第三天
- 第三天(学习记录)
- Java学习第三天
- Java学习第三天
- COBOL学习第三天
- HTML5新特性之Mutation Observer
- CXF开发WebService客户端请求服务端的方式
- XXX cannot be resolved to a type!
- spring总结
- 操作系统内核的支持功能
- 安卓学习历程-第三天
- 一些开发工具
- .随意输入一篇文章,并利用下列标记(标记可以自由组合)给这篇文章建立多样化的文字编排效果。 <Hn>、<FONT>、<B>、<I>、<U>、<BIG>、<SMALL>、<STRIKE>、<BR>、<P
- idea导入git 的 web 项目(一般的web项目)
- 查看端口被占用的情况以及如何解除端口占用
- js 循环 forin注意点
- React Native 使用中的调试及探究其机制
- 计算机视觉caffe之路附2:caffe资源汇总
- 2017.6.21webStrom破解