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的更多相关文章

  1. Unty3D动态加载图片

    试验动态加载图片,代码如下: using UnityEngine; using System.Collections; public class DynamicLoad : MonoBehaviour ...

  2. ie6,7下js动态加载图片不显示错误

    ie6,7下js动态加载图片不显示错误 先描述一下出现这种匪夷所思bug的背景: 我在页面加载的时候加载一堆小缩略图,<a href="javascript:void(0);" ...

  3. asp.net向后台传参数动态加载图片

    //向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam ...

  4. vue动态加载图片,取消格式验证

    vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...

  5. 【MFC】picture控件 两种有细微差别的动态加载图片方法

    摘自:http://www.jizhuomi.com/software/193.html VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) 分类标签: 编程入门 ...

  6. Unity3D-NGUI动态加载图片

    NGUI提供了很方便的UIAtlas,其主要作用是改进DrawCall,把众多图片整合在一张贴图上,由于UNITY3D简单易用的好处,所以只是用原生的GUI很容易忽视DrawCall的问题,所以NGU ...

  7. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  8. vue动态加载图片

    如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...

  9. vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据

    需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功. 过程出现的bug和问题: 1.使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载 ...

随机推荐

  1. TCP三次握手连接和TCP四次挥手及大量TIME_WAIT解决方法:

    1.TCP建立连接,三次握手 建立的TCP连接可靠的连接,必须经过三次握手建立连接才能正式通信彼此传输数数据. 客户端请求服务端建立连接 第一次握手:客户给服务发送一个请求报文SYN, 客户端的状态置 ...

  2. phpstorm不安装apache就可以本地测试PHP

    最近再搞个PHP的项目,找了很多发现phpstorm这个非常小巧而且很好用,,顺便推荐一下idea开发android非常不错,这2个IDE都是一家公司的.本文由智动软件(zdexe.com)原创,转载 ...

  3. timeline bugs

    timeline有个问题巨坑 修了很久 就是一个track控制character的position 另一个track控制同一个character的animaion 拖一段现成的动画进去 这种情况 会有 ...

  4. 阿里云64位centos6.3系统上编译安装redis

    环境 系统:阿里云64位centos 6.3 [rao@AY~]$ cat /etc/issue CentOS release 6.3 (Final) Kernel \r on an \m [rao@ ...

  5. Telnet服务配置

    telnet:远程连接,使用未加密的用户/密码组进行验证,由xinetd服务管理.配置文件为/etc/xinetd.d/telnet Telnet服务的配置步骤如下: 一.安装telnet软件包 #r ...

  6. cocos2d-x 3.1.1 学习笔记[15] Shader 著色器

    首先须要两个文件 gray.fsh varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main() { vec4 v_orColo ...

  7. css新单位 vw , vh

    考虑到未来响应式设计的开发,如果你需要,浏览器的高度也可以基于百分比值调整.但使用基于百分比值并不总是相对于浏览器窗口的大小定义的最佳方式,比如字体大小不会随着你窗口改变而改变,如今css3引入的新单 ...

  8. hdu 3572 Task Schedule(最大流&amp;&amp;建图经典&amp;&amp;dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  9. Hadoop生态圈介绍及入门(转)

    本帖最后由 howtodown 于 2015-4-2 23:15 编辑 问题导读 1.Hadoop生态圈介绍了哪些组件,分别都是什么? 2.大数据与Hadoop是什么关系? 本章主要内容: 理解大数据 ...

  10. 自己Cookie写的自动登录功能 包含BASE64 和MD5的使用

    sql表 username  password字段 User类 有 id username password等字段 Service有一函数 @Override public User findUser ...