ListView滑动过程中禁止加载图片
2015-12-15 01:23
435 查看
listview加载图片优化的功能,
在我们使用新浪微博的时候,细心的同学一定发现了,在滑动的过程中,图片是没有被加载的,
而是在滑动停止时,才加载图片了。
我们今天就做一个这样的效果吧。
我们先考虑两个问题:
1、在滑动停止的时候,如何获得需要加载的图片控件?
2、因为listiew在初始化完成的时候,OnScrollListener的onScrollStateChanged与onScroll并未被触发,如何初始化第一页的图片?
[java] view
plaincopy
package com.test.list;
import android.app.Activity;
import android.os.Bundle;
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.ImageView;
import android.widget.ListView;
public class Test<a target="_blank" href="http://www.2cto.com/kf/yidong/Android/" class="keylink" style="border:none; padding:0px; margin:0px; color:rgb(51,51,51); text-decoration:none; font-size:14px">Android</a>ListActivity extends Activity {
private int start_index, end_index;
// 判断是否是初始化
private boolean isInit = false;
private ListView list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initList();
}
private BaseAdapter adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v;
if (convertView == null) {
v = getLayoutInflater().inflate(R.layout.list_item, null);
v.setTag(v);
} else {
v = (View) convertView.getTag();
ImageView iv = (ImageView) v.findViewById(R.id.img);
iv.setImageResource(R.drawable.ic_launcher);
}
ImageView iv = (ImageView) v.findViewById(R.id.img);
// 给图片控件设置上对应的位置编号
iv.setTag(position);
if (!isInit) {
iv.setImageResource(R.drawable.update_log);
}
return v;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 140;
}
};
private void initList() {
// TODO Auto-generated method stub
list = (ListView) this.findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
isInit = true;
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:// 滑动停止
for (; start_index < end_index; start_index++) {
ImageView img = (ImageView) list.findViewWithTag(start_index);
img.setImageResource(R.drawable.update_log);
}
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
// 设置当前屏幕显示的起始index和结束index
start_index = firstVisibleItem;
end_index = firstVisibleItem + visibleItemCount;
}
});
}
}
在我们使用新浪微博的时候,细心的同学一定发现了,在滑动的过程中,图片是没有被加载的,
而是在滑动停止时,才加载图片了。
我们今天就做一个这样的效果吧。
我们先考虑两个问题:
1、在滑动停止的时候,如何获得需要加载的图片控件?
2、因为listiew在初始化完成的时候,OnScrollListener的onScrollStateChanged与onScroll并未被触发,如何初始化第一页的图片?
[java] view
plaincopy
package com.test.list;
import android.app.Activity;
import android.os.Bundle;
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.ImageView;
import android.widget.ListView;
public class Test<a target="_blank" href="http://www.2cto.com/kf/yidong/Android/" class="keylink" style="border:none; padding:0px; margin:0px; color:rgb(51,51,51); text-decoration:none; font-size:14px">Android</a>ListActivity extends Activity {
private int start_index, end_index;
// 判断是否是初始化
private boolean isInit = false;
private ListView list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.initList();
}
private BaseAdapter adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v;
if (convertView == null) {
v = getLayoutInflater().inflate(R.layout.list_item, null);
v.setTag(v);
} else {
v = (View) convertView.getTag();
ImageView iv = (ImageView) v.findViewById(R.id.img);
iv.setImageResource(R.drawable.ic_launcher);
}
ImageView iv = (ImageView) v.findViewById(R.id.img);
// 给图片控件设置上对应的位置编号
iv.setTag(position);
if (!isInit) {
iv.setImageResource(R.drawable.update_log);
}
return v;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 140;
}
};
private void initList() {
// TODO Auto-generated method stub
list = (ListView) this.findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
isInit = true;
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:// 滑动停止
for (; start_index < end_index; start_index++) {
ImageView img = (ImageView) list.findViewWithTag(start_index);
img.setImageResource(R.drawable.update_log);
}
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
// 设置当前屏幕显示的起始index和结束index
start_index = firstVisibleItem;
end_index = firstVisibleItem + visibleItemCount;
}
});
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories