Android中的GridView显示大量图片的问题。 用GridView显示本地文件夹中的图片,当图片量较多时,页面半天不出来一张图片,我的想法是从本地读取了一张就显示一张,边读取边显示,而不是等全部图片都读取完后,再一次性显示出来。有没有哪位高手知道该怎么写。最好给出个Demo,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先放占位图展示。获取到再替换。不过大量图片很容易会OOM异常。要控制好,及时回收。好像目前没什么好的解决方式 把你要用的图片全部放在资源里面。把图片的名字改成比如说:image_1 image_2然后在你显示的时候。你用地址链接啊。比如说image[i] Integer[] allImages=new Integer[]{ R.drawable.grid_view_01, R.drawable.grid_view_02, R.drawable.grid_view_03, R.drawable.grid_view_04, R.drawable.grid_view_05, R.drawable.grid_view_06, R.drawable.grid_view_07, R.drawable.grid_view_08, R.drawable.grid_view_09, R.drawable.grid_view_10, R.drawable.grid_view_11, R.drawable.grid_view_12, R.drawable.grid_view_13, R.drawable.grid_view_14, R.drawable.grid_view_15, }; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.gridview); GridView gridView=(GridView)findViewById(R.id.gridviewtest); BaseAdapter imageAdapter=new BaseAdapter(){ public int getCount(){ return allImages.length; } public Object getItem(int position){ return null; } public long getItemId(int position){ return position; } public View getView(int position,View converToView,ViewGroup parent){ ImageView imageView=null; if(imageView==null){ imageView=new ImageView(GridViewActivity.this); imageView.setImageResource(allImages[position]); imageView.setPadding(8,8,8,8); imageView.setScaleType(ScaleType.CENTER); imageView.setLayoutParams(new GridView.LayoutParams(80,80)); }else{ imageView=(ImageView)converToView; } imageView.setImageResource(allImages[position]); return imageView; } }; gridView.setAdapter(imageAdapter); } GridView不是通过GridView.setAdapter(ListAdapter)显示的么?是先用这个放占位图,然后再获取图片再setAdapter么? 有用么。。悲剧那不一样么?还都放资源里面,你的给你100张图片你的应用程序不暴了。。一般都是用2楼的方法。。具体实现google去。嘿嘿 有啊,先载入,你的图标应该是放在adapter中子条显示的,子条开线程读一个刷一个, 你可以参考ListView的异步加载图片方式 具体应该用HashMap<String,SoftReference<Bitmap>>来管理大量图片,并且在用完之后对HashMap里面的Bitmap及时做Recycle,基本上可以避免OOM,至于楼主提出的问题,如果有更小尺寸的图片,你可以先把小图片拉伸到大图片的尺寸(通常是模糊的),然后等大图片下载完成后,用清晰的大图替换(拉伸的)小图片,即可,让用户既可以马上看到图,还有个体验是下载完成变成清晰的图片,感觉还是不错的,我的项目就是这样做的,如果你没有对象的小图片,就用默认的downloading图片先占位显示也可以,但是不如先模糊后清晰的体验好,希望对你有帮助。 忘了说了,HashMap的key通常用的是图片的url路径(这个是唯一的) ProgressDialog的问题,求解 怎样自定义spinner外观 SurfaceView 实现涂鸦中 檫子的实现!!!! thanks google GPS问题 Android 中文论坛 500分求解 修改 在edittext 被选文字长按弹出的菜单选项 Android开发,如何在EditText中显示提示信息,并且单击之后就会自动清除 带用户管理的客户端,用户改了密码,怎么才能立即发现并强制重新登录 ListView和ActivityGroup共同使用报空指针异常 android平台上如何开发一个类似word的应用? Listview 点击偶尔会错位
把图片的名字改成比如说:image_1 image_2
然后在你显示的时候。你用地址链接啊。比如说image[i]
Integer[] allImages=new Integer[]{
R.drawable.grid_view_01,
R.drawable.grid_view_02,
R.drawable.grid_view_03,
R.drawable.grid_view_04,
R.drawable.grid_view_05,
R.drawable.grid_view_06,
R.drawable.grid_view_07,
R.drawable.grid_view_08,
R.drawable.grid_view_09,
R.drawable.grid_view_10,
R.drawable.grid_view_11,
R.drawable.grid_view_12,
R.drawable.grid_view_13,
R.drawable.grid_view_14,
R.drawable.grid_view_15,
};
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview);
GridView gridView=(GridView)findViewById(R.id.gridviewtest);
BaseAdapter imageAdapter=new BaseAdapter(){
public int getCount(){
return allImages.length;
}
public Object getItem(int position){
return null;
}
public long getItemId(int position){
return position;
}
public View getView(int position,View converToView,ViewGroup parent){
ImageView imageView=null;
if(imageView==null){
imageView=new ImageView(GridViewActivity.this);
imageView.setImageResource(allImages[position]);
imageView.setPadding(8,8,8,8);
imageView.setScaleType(ScaleType.CENTER);
imageView.setLayoutParams(new GridView.LayoutParams(80,80));
}else{
imageView=(ImageView)converToView;
}
imageView.setImageResource(allImages[position]);
return imageView;
}
};
gridView.setAdapter(imageAdapter);
}
有用么。。悲剧那不一样么?还都放资源里面,你的给你100张图片你的应用程序不暴了。。一般都是用2楼的方法。。具体实现google去。嘿嘿