2013-07-07 141 views
0

我的目标是显示SD卡中平滑列表中的图像(缩略图),所以我编辑了演示示例(从web加载图像到gridview),将图像从SD卡加载到查看性能,并且当图像没有被缓存(第一次)时,它很慢,因为它应该从本地SD卡而不是网络加载图像,但是在图像被缓存后,iam对结果非常满意,请看一看让我知道,如果IAM做错什么,或者我如何能在第一装载提高性能,还亚姆开放,也许更加专业化加载图像形成SD卡其他库,这里是代码: -通用图像加载器显示来自SD卡的图像

public class ImageGridActivity extends AbsListViewBaseActivity { 


    // get files path in camera folder 
    public String[] getimages() { 
     String[] images=new String[175]; 
     String path="file:///mnt/sdcard/DCIM/Camera/"; 
     int counter=0; 
      String name; 
     File sdCardRoot = Environment.getExternalStorageDirectory(); 
     File yourDir = new File(sdCardRoot, "dcim/camera"); 
     for (File f : yourDir.listFiles()) { 
      if (f.isFile()){ 
       name = path + f.getName().toString() ; 
      images[counter]=name; 
       // make something with the name 
      counter++;} 
     } 
     return images; 
    } 



    String[] imageUrls= getimages(); 
    DisplayImageOptions options; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ac_image_grid); 



     Bundle bundle = getIntent().getExtras(); 
    // imageUrls = bundle.getStringArray(Extra.IMAGES); 
    // imageUrls[0]="file:///mnt/sdcard/DCIM/Camera/abc.jpg"; 

     options = new DisplayImageOptions.Builder() 
    /*  .showStubImage(R.drawable.ic_stub) 
      .showImageForEmptyUri(R.drawable.ic_empty) 
      .showImageOnFail(R.drawable.ic_error) 
      .cacheInMemory(true) 
      .cacheOnDisc(true) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .build(); */ 
     .showStubImage(R.drawable.ic_stub) 
     .showImageForEmptyUri(R.drawable.ic_empty) 
     .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) 
     .showImageOnFail(R.drawable.ic_launcher).cacheInMemory() 
     .cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build(); 

     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
       getApplicationContext()).discCacheExtraOptions(720 , 1280 , CompressFormat.PNG, 0, null).build(); 

     ImageLoader.getInstance().init(config); 


     listView = (GridView) findViewById(R.id.gridview); 
     ((GridView) listView).setAdapter(new ImageAdapter()); 
     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       startImagePagerActivity(position); 
      } 
     }); 
    } 

    private void startImagePagerActivity(int position) { 
     Intent intent = new Intent(this, ImagePagerActivity.class); 
     intent.putExtra(Extra.IMAGES, imageUrls); 
     intent.putExtra(Extra.IMAGE_POSITION, position); 
     startActivity(intent); 
    } 

    public class ImageAdapter extends BaseAdapter { 


     @Override 
     public int getCount() { 
      return imageUrls.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return null; 
     } 

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

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      final ImageView imageView; 
      if (convertView == null) { 
       imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

      imageLoader.displayImage(imageUrls[position], imageView, options); 

      return imageView; 
     } 
    } 
} 

item_grid_image

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/image" 
    android:layout_width="fill_parent" 
    android:layout_height="120dip" 
    android:adjustViewBounds="true" 
    android:contentDescription="@string/descr_image" 
    android:scaleType="centerCrop" /> 

预先感谢您,

+0

向我们展示'item_grid_image'代码并且不使用硬编码路径。 – Raghunandan

+0

新增item_grid_image – user1097275

+0

也可以请你解释一下你的意思是“不要使用硬编码路径”。 – user1097275

回答

1

的第一件事是,我不会每一次我经过你的活动onCreate时间初始化图像加载器。基本上,您不需要多次初始化,所以我建议您在ApplicationonCreate中初始化它。我不知道如果图像加载器在已经开始下载某些图像后重新初始化它将如何表现。

除此之外,您对我的操作似乎有点不可思议 - 您的手机上已经有图像,但是您可以让图像加载器执行任务并再次存储它们,以便将它们缓存起来。我认为这个参数对你的配置是虚假的:.cacheOnDisc()尝试没有它,看看你是否得到任何更快(删除它将停止UIL在SD卡上做重复)

+0

谢谢我一定会尝试删除cacheOnDisc并检查性能,我应该使用任何其他参数像threedpoolsize,并且我应该使用视图持有人? – user1097275

+0

@ user1097275是的,你应该使用viewholder进行平滑的滚动和性能 – Raghunandan

相关问题