2013-10-06 33 views
3

我试图建立一个从设备和文本中获取图像的列表。事实证明,从手机相机拍摄的手机中拍摄图像是一项需要一段时间的任务,因此我试图尽可能快地完成,以便用户体验不会变慢。我从这里得到的是,它看起来像所有的图像加载在一个ImageView和图像传播到所有其他ImageViews(我不完全确定我的实施ViewHolder技术和自定义CursorAdapter是正确的)。Android自定义与AsyncTask的CursorAdapter

public class MyCustomCurserAdapter extends CursorAdapter { 
    static class ViewHolder { 
    public TextView nameText; 
    public ImageView imageThumbnail; 
    } 


    Cursor cursor; 

    public MyCustomCurserAdapter(Context context, Cursor c, int flags) { 
    super(context, c, flags); 
    // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void bindView(View view, Context arg1, Cursor cursor) { 

    ViewHolder holder = (ViewHolder)view.getTag(); 


    int pathCol = cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN_PATH); 
    String imageInSD = cursor.getString(pathCol); 
    File imgFile = new File(imageInSD); 

    if(imgFile.exists()){ 

     int nameCol = cursor.getColumnIndex(NewPicSQLiteHelper.COLUMN_PIC_NAME); 
     String name = cursor.getString(nameCol); 

     if (name != null) 
      holder.nameText.setText(name); 

     ImageTask task = new ImageTask(holder.imageThumbnail); 
     task.execute(imgFile); 
    } 

    } 

    @Override 
    public View newView(Context arg0, Cursor cur, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View view = inflater.inflate(R.layout.new_pic_item, parent, false); 
    ViewHolder holder = new ViewHolder(); 

    holder = new ViewHolder(); 
    holder.nameText = (TextView) view.findViewById(R.id.pic_name_entry); 
    holder.imageThumbnail = (ImageView) view.findViewById(R.id.pic_thumbnail); 

    // The tag can be any Object, this just happens to be the ViewHolder 
    view.setTag(holder); 


    return view; 
    } 


    private class ImageTask extends AsyncTask<File, Void, Bitmap>{ 
    private final WeakReference <ImageView> imageViewReference; 

    public ImageTask(ImageView imageView) { 
     imageViewReference = new WeakReference <ImageView> (imageView); 
    } 

    @Override 
    protected Bitmap doInBackground(File... params) { 
     String path = params[0].getAbsolutePath(); 

     return decodeSampledBitmapFromResource(path,75,75); 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     if (imageViewReference != null) { 
      ImageView imageView = imageViewReference.get(); 
      if (imageView != null) { 
       if (result != null) { 
        imageView.setImageBitmap(result); 
        imageView.setVisibility(ImageView.VISIBLE); 
       } else { 
            imageView.setVisibility(ImageView.INVISIBLE); 
       } 
      } 

     } 

    } 

    private Bitmap decodeSampledBitmapFromResource(String orgImagePath, int reqWidth, int reqHeight) { 


    } 

    private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { 

    } 
} 

回答

0

我认为可能的原因这就是它的服用时间是因为图像是至少1 MB的大小进一步您可以更改缩略图并检索它并且如果仍然抽出时间,你可以把懒下载这是做当我们把图像从服务器(基本上它是它加载文本和图像显示,当我们得到的图像)

+0

我已经考虑到了影像可重加载到RAM中,所以我使用的是谷歌建议要做:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html – Eli

0

删除ImageTask的AsyncTask ..

使用图书馆像GlidePicasso。对于几乎任何需要获取,调整大小和显示远程图像的情况都非常有效。

我用于加载图像的滑行距离phone storage uri

使用上述任何一项,看到了差距

相关问题