用GridView显示本地文件夹中的图片,当图片量较多时,页面半天不出来一张图片,我的想法是从本地读取了一张就显示一张,边读取边显示,而不是等全部图片都读取完后,再一次性显示出来。有没有哪位高手知道该怎么写。最好给出个Demo,谢谢!

解决方案 »

  1.   

    先放占位图展示。获取到再替换。不过大量图片很容易会OOM异常。要控制好,及时回收。好像目前没什么好的解决方式
      

  2.   

    把你要用的图片全部放在资源里面。
    把图片的名字改成比如说: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);
    }
      

  3.   

    GridView不是通过GridView.setAdapter(ListAdapter)显示的么?是先用这个放占位图,然后再获取图片再setAdapter么?
      

  4.   


    有用么。。悲剧那不一样么?还都放资源里面,你的给你100张图片你的应用程序不暴了。。一般都是用2楼的方法。。具体实现google去。嘿嘿
      

  5.   

    有啊,先载入,你的图标应该是放在adapter中子条显示的,子条开线程读一个刷一个, 
      

  6.   

    你可以参考ListView的异步加载图片方式
      

  7.   

    具体应该用HashMap<String,SoftReference<Bitmap>>来管理大量图片,并且在用完之后对HashMap里面的Bitmap及时做Recycle,基本上可以避免OOM,至于楼主提出的问题,如果有更小尺寸的图片,你可以先把小图片拉伸到大图片的尺寸(通常是模糊的),然后等大图片下载完成后,用清晰的大图替换(拉伸的)小图片,即可,让用户既可以马上看到图,还有个体验是下载完成变成清晰的图片,感觉还是不错的,我的项目就是这样做的,如果你没有对象的小图片,就用默认的downloading图片先占位显示也可以,但是不如先模糊后清晰的体验好,希望对你有帮助。
      

  8.   

    忘了说了,HashMap的key通常用的是图片的url路径(这个是唯一的)