动态加载图片的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传参后,再次刷新页面,参数丢失导致数据无法再次加载 ...
随机推荐
- Python结合Shell/Hadoop实现MapReduce
基本流程为: cat data | map | sort | reduce cat devProbe | ./mapper.py | sort| ./reducer.py echo "foo ...
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...
- 为TextView设置两种状态,程序中可以动态切换
经常会需要用文字的两种状态来表示当前系统的某两种状态.比如: 这里的第一个TextView和后两个TextView就表示了两种状态.我们可以在程序的动态的切换状态(而不是直接修改颜色) ...
- linux ubuntu下abaqus-6.14安装破解完全指南
本人亲测可用 目录 安装前准备 安装过程 机器配置 腾讯云服务器 ubuntu server 16.10 1.首先要在服务器上安装gui及相关依赖 sudo apt-get install ubunt ...
- scala之Actors
这多半是因为actor是共享线程,所以阻塞线程会导致其他线程获取不到线程.
- poj 1284 Primitive Roots(原根+欧拉函数)
http://poj.org/problem?id=1284 fr=aladdin">原根 题意:对于奇素数p,假设存在一个x(1<x<p),(x^i)%p两两不同(0&l ...
- /dev/null 的含义和用途
/dev/null 代表空设备文件,它等价于一个仅仅写文件,全部写入它的内容都会永远丢失.而尝试从它那儿读取内容则什么也读不到. 0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统 ...
- weblogic基本安装部署
1.3.1 安装WebLogic10(1) <JavaEE程序设计与应用开发>第1章JavaEE介绍和环境配置,本章首先介绍了JavaEE的基本理论,然后对本书将要使用的软件:JDK.服务 ...
- SonarQube install on Kubernetes
Sonarqube搭建代码 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: postgres labels: app: ...
- Google Maps API v2密钥申请
1. 进入到Google APIs Console页面 https://code.google.com/apis/console/ 点击左边导航栏的Seivices进入 在All services 的 ...