2013-03-24 118 views
2

我想填充我的Gridview缩略图图像,但我有问题解码图像内的异形。当我启动应用程序时,图像被逐个加载,并且图像显示不正确(一旦我滚动显示顶部图像并在稍后加载原始图像)。这里是我的代码:Gridview填充问题与asynctask

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    private List<String> mList; 
    private int mheight; 
    private int mwidth; 
    private InputStream is; 

    public ImageAdapter(Context context, List<String> list, int height, int width) { 
     mContext = context; 
     mList = list; 
     mheight = height; 
     mwidth = width; 
    } 


    @Override 
    public int getCount() { 
     return mList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mList.get(position).toString(); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
     } else { 
      imageView = (ImageView) convertView; 
     } 


     InputStream is; 
     try { 
      is = mContext.getAssets().open(mList.get(position)); 
      Loadimage task = new Loadimage(imageView , mheight , mwidth); 
      task.execute(is); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return imageView ; 

    } 

    public class Loadimage extends AsyncTask<InputStream, Void, Bitmap>{ 
     private final WeakReference<ImageView> imageViewReference; 


     private InputStream is = null; 
     private int width; 


     public Loadimage(ImageView imageView, int mheight, int mwidth) { 
      imageViewReference = new WeakReference<ImageView>(imageView); 
      this.width=mwidth; 

      // TODO Auto-generated constructor stub 
     } 

     @Override 
     protected Bitmap doInBackground(InputStream... params) { 
      is = params[0]; 

      if (is !=null) { 

       Bitmap bitmap = BitmapFactory.decodeStream(is); 
       Bitmap nBitmap =Bitmap.createScaledBitmap(bitmap,width/3 , width/3, false); 
       return nBitmap;  
      } 
      return null; 
      } 
     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      if (imageViewReference != null && bitmap != null) { 
       final ImageView imageView = imageViewReference.get(); 
       if (imageView != null) { 
        imageView.setImageBitmap(bitmap); 
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
       } 


     } 
    } 
} 
+0

为什么不使用Universal Image Loader或Lazy list ?.还可以使用视图来平滑滚动和执行。 – Raghunandan 2013-03-24 15:35:01

回答

1

我强烈推荐Universal Image Loader。它只是你需要的:一个可以用缩略图加载的gridview。它还具有内存和磁盘缓存功能,以及用于线程池大小的日志记录和功能。试一试;它适用于我,完全适合您的需求。

+0

我试图使用通用图像加载器,但我在这里有一个问题我的新帖http://stackoverflow.com/questions/15618989/gridview-with-universal-image-loader-images-are-loading-slowly – Joseph27 2013-03-25 15:44:05