ListView 的图片下载,优化造成的跳变
2014-06-11 16:17
169 查看
public class MainActivity extends Activity {
HashMap<Integer,Bitmap> map = new HashMap<Integer,Bitmap>();
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView)findViewById(R.id.listView1);
MyApapter myApapter = new MyApapter();
listview.setAdapter(myApapter);
}
class User
{
ImageView imageview;
ProgressBar pb;
TextView tv;
Button button;
}
class MyApapter extends BaseAdapter
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
User user = new User();
LayoutInflater inflater = getLayoutInflater();
if(convertView==null)
{
view = inflater.inflate(R.layout.itmp, null);
user.imageview = (ImageView)view.findViewById(R.id.imageView1);
user.pb = (ProgressBar)view.findViewById(R.id.progressBar1);
user.button = (Button)view.findViewById(R.id.button1);
user.tv = (TextView)view.findViewById(R.id.textView1);
view.setTag(user);
}else
{
view = convertView;
user = (User)view.getTag();
}
//下载图片
//设置图片还未开始下载时的状态
user.imageview.setImageResource(R.drawable.ic_launcher);
Bitmap bitmap = map.get(position);
if (bitmap==null)
{
MyAsyncTask myimageview = new MyAsyncTask(user.imageview,position,user.pb);
myimageview.execute("http://192.168.56.1:8080/service/qq"+position+".png");
}else
{
user.imageview.setImageBitmap(bitmap);
}
return view;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
class MyAsyncTask extends AsyncTask<String, Void, Bitmap>
{
int position;
ImageView imageview;
ProgressBar pb;
public MyAsyncTask(ImageView imageview,int position,ProgressBar pb) {
this.imageview = imageview;
this.position = position;
this.pb = pb;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
try {
URL url = new URL(params[0]);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
//得到当前屏幕可见第一行
int fvb = listview.getFirstVisiblePosition();
int lvp = listview.getLastVisiblePosition();
if (position>=fvb&&position<=lvp)
{
imageview.setImageBitmap(result);
}
map.put(position, result);
super.onPostExecute(result);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
HashMap<Integer,Bitmap> map = new HashMap<Integer,Bitmap>();
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView)findViewById(R.id.listView1);
MyApapter myApapter = new MyApapter();
listview.setAdapter(myApapter);
}
class User
{
ImageView imageview;
ProgressBar pb;
TextView tv;
Button button;
}
class MyApapter extends BaseAdapter
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
User user = new User();
LayoutInflater inflater = getLayoutInflater();
if(convertView==null)
{
view = inflater.inflate(R.layout.itmp, null);
user.imageview = (ImageView)view.findViewById(R.id.imageView1);
user.pb = (ProgressBar)view.findViewById(R.id.progressBar1);
user.button = (Button)view.findViewById(R.id.button1);
user.tv = (TextView)view.findViewById(R.id.textView1);
view.setTag(user);
}else
{
view = convertView;
user = (User)view.getTag();
}
//下载图片
//设置图片还未开始下载时的状态
user.imageview.setImageResource(R.drawable.ic_launcher);
Bitmap bitmap = map.get(position);
if (bitmap==null)
{
MyAsyncTask myimageview = new MyAsyncTask(user.imageview,position,user.pb);
myimageview.execute("http://192.168.56.1:8080/service/qq"+position+".png");
}else
{
user.imageview.setImageBitmap(bitmap);
}
return view;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
class MyAsyncTask extends AsyncTask<String, Void, Bitmap>
{
int position;
ImageView imageview;
ProgressBar pb;
public MyAsyncTask(ImageView imageview,int position,ProgressBar pb) {
this.imageview = imageview;
this.position = position;
this.pb = pb;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
try {
URL url = new URL(params[0]);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
//得到当前屏幕可见第一行
int fvb = listview.getFirstVisiblePosition();
int lvp = listview.getLastVisiblePosition();
if (position>=fvb&&position<=lvp)
{
imageview.setImageBitmap(result);
}
map.put(position, result);
super.onPostExecute(result);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
相关文章推荐
- ListView优化使用imageLoader下载和缓存图片,图片异步加载,解决图片多了之后容易卡顿。
- [Android实例] 下载网络图片 涉及ListView的优化
- ,避免造成混乱。 设想1:拿ListView为例,如果ListView的ItemView复用机制,所有的ItemView复用同一个,如果在多线程下载图片的情况下,可能最终只有最后一个View显示图片
- android ListView 异步下载图片 优化一
- listview异步图片加载之优化篇(android)
- 进一步优化Android ListView GridView中异步加载图片
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- Android的ListView异步下载图片官方提供的源码
- 【技术原创】探讨一下京东商城价格图片解析算法的优化,附演示程序下载
- Android之ListView异步加载网络图片(优化缓存机制) .
- listview异步加载图片(深度优化)(转载)
- Android之ListView异步加载网络图片(优化缓存机制)
- Android异步下载网络图片&android解析xml文件的方式&使用Adapter为ListView提供数据
- ListView异步下载图片的另一种实现
- Android Listview 加载图片优化--本地加载大量图片,解决滑动卡顿现象(滑动停止加载图片)
- 对ListView进行优化,加载大数据量或者包含图片信息的时候滚屏加载
- 【技术原创】探讨一下京东商城价格图片解析算法的优化,附演示程序下载
- Android ListView 性能优化-----(异步加载图片资源)
- 又优化了一下 Android ListView 异步加载图片
- 使用GCD异步下载图片,优化