动态加载图片的Adapter
package com.example.cc.ecustapp.Adapter; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.view.LayoutInflater; import com.example.cc.ecustapp.R;
import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; public class ImageAdapter1 extends BaseAdapter implements OnScrollListener{
/**
* 上下文对象的引用
*/
private Context context; /**
* Image Url的数组
*/
private String [] imageThumbUrls; /**
* GridView对象的应用
*/
private NoScrollGridView mGridView; /**
* 记录是否刚打开程序,用于解决进入程序不滚动屏幕,不会下载图片的问题。
* 参考http://blog.csdn.net/guolin_blog/article/details/9526203#comments
*/
private boolean isFirstEnter = true; /**
* 一屏中第一个item的位置
*/
private int mFirstVisibleItem; /**
* 一屏中所有item的个数
*/
private int mVisibleItemCount; private LayoutInflater mLayoutInflater = null; //private ArrayList<ProductEntity> mList=new ArrayList<>(); private DisplayMetrics displaysMetrics; public void setUrls(String[] imageThumbUrls){this.imageThumbUrls=imageThumbUrls;} //public void setlist(ArrayList<ProductEntity> list){this.mList=list;} public ImageAdapter1(Context context, NoScrollGridView mGridView, String[] imageThumbUrls,DisplayMetrics displayMetrics){
this.context = context;
this.mGridView = mGridView;
this.imageThumbUrls = imageThumbUrls;
// this.mList=list;
isFirstEnter=true;
mLayoutInflater=LayoutInflater.from(context);
this.displaysMetrics = displayMetrics;//获取屏幕分辨率
} @Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//仅当GridView静止时才去下载图片,GridView滑动时取消所有正在下载的任务
if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
showImage(mFirstVisibleItem, mVisibleItemCount);
}
} /**
* GridView滚动的时候调用的方法,刚开始显示GridView也会调用此方法
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mFirstVisibleItem = firstVisibleItem;
mVisibleItemCount = visibleItemCount;
// 因此在这里为首次进入程序开启下载任务。
if(isFirstEnter && visibleItemCount > 0){
showImage(mFirstVisibleItem,mVisibleItemCount);
isFirstEnter = false;
}
} @Override
public int getCount() {
return imageThumbUrls.length;
} @Override
public Object getItem(int position) {
return imageThumbUrls[position];
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, final View convertView, ViewGroup parent) {
ImageView mImageView;
TextView tvView;
final String mImageUrl = imageThumbUrls[position];
// final ProductEntity pro;
// if(!mList.isEmpty()&&mList.get(position)!=null)
// pro=mList.get(position);
// else
// pro=null;
View view;
if (convertView == null) {
view = mLayoutInflater.inflate(R.layout.gridview_item,parent,false);
} else {
view = convertView;
}
mImageView=(ImageView)view.findViewById(R.id.ItemImage);
//tvView=(TextView)view.findViewById(R.id.tvTitle); //tvView.setText(pro.getProName());
// mImageView.setLayoutParams(new RelativeLayout.LayoutParams(displaysMetrics.widthPixels/3,displaysMetrics.heightPixels/5));;
//给ImageView设置Tag,这里已经是司空见惯了
mImageView.setTag(mImageUrl);
ImageLoader.getInstance().displayImage(mImageUrl, mImageView);
// mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
// mImageView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Intent intent=new Intent();
// intent.putExtra("ProductName",pro.getProName());
// intent.setClass(context, ProductdetailActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(intent);
// }
// }); return view;
} /**
* 显示当前屏幕的图片,先会去查找LruCache,LruCache没有就去sd卡或者手机目录查找,在没有就开启线程去下载
* @param firstVisibleItem
* @param visibleItemCount
*/
public void showImage(int firstVisibleItem, int visibleItemCount){
for(int i=firstVisibleItem; i<firstVisibleItem + visibleItemCount; i++) {
final String mImageUrl = imageThumbUrls[i];
final ImageView mImageView = (ImageView) mGridView.findViewWithTag(mImageUrl);
ImageLoader.getInstance().displayImage(mImageUrl, mImageView);
}
} }
动态加载图片的Adapter的更多相关文章
- Unty3D动态加载图片
试验动态加载图片,代码如下: using UnityEngine; using System.Collections; public class DynamicLoad : MonoBehaviour ...
- ie6,7下js动态加载图片不显示错误
ie6,7下js动态加载图片不显示错误 先描述一下出现这种匪夷所思bug的背景: 我在页面加载的时候加载一堆小缩略图,<a href="javascript:void(0);" ...
- asp.net向后台传参数动态加载图片
//向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam ...
- vue动态加载图片,取消格式验证
vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...
- 【MFC】picture控件 两种有细微差别的动态加载图片方法
摘自:http://www.jizhuomi.com/software/193.html VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) 分类标签: 编程入门 ...
- Unity3D-NGUI动态加载图片
NGUI提供了很方便的UIAtlas,其主要作用是改进DrawCall,把众多图片整合在一张贴图上,由于UNITY3D简单易用的好处,所以只是用原生的GUI很容易忽视DrawCall的问题,所以NGU ...
- Vue动态加载图片图片不显示
图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...
- vue动态加载图片
如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...
- vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据
需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功. 过程出现的bug和问题: 1.使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载 ...
随机推荐
- Hive 内建操作符与函数开发——深入浅出学Hive
第一部分:关系运算 Hive支持的关系运算符 •常见的关系运算符 •等值比较: = •不等值比较: <> •小于比较: < •小于等于比较: <= •大于比较: > •大 ...
- iOS:判断用户名是否以字母开头、手机号输入、邮箱是否正确的正则表达式
新建一个字符串分类:NSString(Check),定义类方法更方便 .h文件 #import <Foundation/Foundation.h> @interface NSString ...
- iOS:quartz2D绘图(显示绘制在PDF上的图片)
quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来.在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)lo ...
- iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply
只执行一次 (多用于单例模式) dispatch_once(dispatch_once_t *predicate, dispatch_block_t block); dispatch_once_t ...
- 较详细的介绍JNI
JNI其实是Java Native Interface的简称,也就是java本地接口.它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++).也许不少人觉得Java已经足够强 ...
- ISP图像调试工程师——对比度增强(熟悉图像预处理和后处理技术)
经典对比度增强算法: http://blog.csdn.net/ebowtang/article/details/38236441
- Perforce查看workspace sync到的changlist
一 查看workspace sync到的changelist perforce的workspace其实是一些特定版本的文件的 结合,相比只将workspace对应到某个特定的changelist,此方 ...
- datagrid MAC和VPNIP显示不出来,Time显示错误的问题
之前出错时也没截图,大致说一下. 这是现在运行成功的界面: 开始时间界面出现的是时间是原始值,即1970年1月1日午夜以来的毫秒数,类似于这样:1523786314827 因为我这里是调用的函数读取m ...
- Vue 组件通信(组件间通信)
1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...
- 一个简单的python爬虫(转)
# -*- coding: utf-8 -*- #--------------------------------------- # 程序:百度贴吧爬虫 # 版本:0.1 # 作者:why # 日期: ...