无法设置在ListView中

问题描述:

图片我想实现一个Pinterest的风格的图像视图象下面这样:无法设置在ListView中

enter image description here

我想要的图像从我的SD卡的特定文件夹进行设置。我正在尝试下面的代码,但无法从文件夹中获取图像(显示一个空白的白色屏幕)。

CODE:

ItemsActivity.java:

private void loadItems(){ 
String[] leftItems = new String[]{}; 
String[] rightItems = new String[]{}; 
ItemsAdapter mAdapter = null; 
ArrayList<String> image_items = ItemsAdapter.getImages(); 
System.out.println("The images are obtained in image_items"); 
System.out.println("The list of images are" + image_items.toString()); 
mAdapter = new ItemsAdapter(this,R.layout.item,image_items); 
listViewLeft.setAdapter(mAdapter); 
listViewRight.setAdapter(mAdapter); 
leftViewsHeights = new int[leftItems.length]; 
rightViewsHeights = new int[rightItems.length]; 
} 

ItemsAdapter.java:

public class ItemsAdapter extends ArrayAdapter<String>{ 

    Context context; 
    LayoutInflater inflater; 
    int layoutResourceId; 
    float imageWidth; 
    InputStream is; 
    int item; 
    public ItemsAdapter(Context context, int layoutResourceId, ArrayList<String> items) { 
     super(context, layoutResourceId, items); 
     this.context = context; 
     this.layoutResourceId = layoutResourceId; 
     float width = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth(); 
     float margin = (int)convertDpToPixel(10f, (Activity)context); 
     imageWidth = ((width - (3 * margin))/2); 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     FrameLayout row = (FrameLayout) convertView; 
     ItemHolder holder; 
     String item = getItem(position); 
     if (row == null) { 
      holder = new ItemHolder(); 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = (FrameLayout) inflater.inflate(layoutResourceId, parent, false); 
      ImageView itemImage = (ImageView)row.findViewById(R.id.item_image); 
      holder.itemImage = itemImage; 
     } else { 
      holder = (ItemHolder) row.getTag(); 
     } 
     row.setTag(holder); 
     setImageBit(item, holder.itemImage); 
     return row; 
    } 

    public static class ItemHolder 
    { 
     ImageView itemImage; 
    } 

    // resize the image proportionately so it fits the entire space 
    private void setImageBit(String path, ImageView imageView){ 
     path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "SanPics2"; 
     Bitmap bitmap = BitmapFactory.decodeFile(path); 
     float i = ((float) imageWidth)/((float) bitmap.getWidth()); 
     float imageHeight = i * (bitmap.getHeight()); 
     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams(); 
     params.height = (int) imageHeight; 
     params.width = (int) imageWidth; 
     imageView.setLayoutParams(params); 
     int count = 10; 
     String file_name = null; 
     for(int j = 1;j<count;j++) 
     { 
      file_name = "Image " + i + ".jpg"; 
     } 
     //ArrayList<String> img_bitmap; 
     //Bitmap bmp = ImgBitFromFile(path, file_name); 
     imageView.setImageBitmap(bitmap); 

    } 

    public static float convertDpToPixel(float dp, Context context){ 
     Resources resources = context.getResources(); 
     DisplayMetrics metrics = resources.getDisplayMetrics(); 
     float px = dp * (metrics.densityDpi/160f); 
     return px; 
    } 
    public static ArrayList<String> getImages() 
    { 
     String path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "SanPics2"; 
     File mainfolder = new File(path); 
     ArrayList<String> files = new ArrayList<String>(); 
     if(mainfolder.listFiles() == null) 
     return null; 
     for(File f : mainfolder.listFiles()) 
     { 
      if(f.getName().contains(".jpg")) 
      { 
       files.add(f.getAbsolutePath()); 
      } 
     } 
     return files; 
    } 

我可以清楚地看到,getImages()在ItemsAdapter方法.java检索所有图像s(我用logcat打印过),但它似乎没有在适配器中设置图像。 我的logcat如下:

01-08 17:30:35.010: E/Trace(14821): error opening trace file: No such file or directory (2) 
01-08 17:30:35.040: V/ActivityThread(14821): Class path: /data/app/com.vladimir.pinterestlistview-2.apk, JNI path: /data/data/com.vladimir.pinterestlistview/lib 
01-08 17:30:35.100: I/System.out(14821): The images are got in image_items 
01-08 17:30:35.100: I/System.out(14821): The list of images are[/storage/sdcard0/Pictures/SanPics2/Image 7.jpg, /storage/sdcard0/Pictures/SanPics2/Image 1.jpg, /storage/sdcard0/Pictures/SanPics2/Image 2.jpg, /storage/sdcard0/Pictures/SanPics2/Image 3.jpg, /storage/sdcard0/Pictures/SanPics2/Image 4.jpg, /storage/sdcard0/Pictures/SanPics2/Image 5.jpg, /storage/sdcard0/Pictures/SanPics2/Image 8.jpg, /storage/sdcard0/Pictures/SanPics2/1388143033275.jpg, /storage/sdcard0/Pictures/SanPics2/1388143591263.jpg, /storage/sdcard0/Pictures/SanPics2/1388143312172.jpg, /storage/sdcard0/Pictures/SanPics2/1388143530089.jpg, /storage/sdcard0/Pictures/SanPics2/Image 6.jpg] 
01-08 17:30:35.230: I/Adreno200-EGL(14821): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3_RB3.04.01.01.42.002_msm8625_JB_REL_2.0.3_Merge_release_AU (Merge) 
01-08 17:30:35.230: I/Adreno200-EGL(14821): Build Date: 12/12/12 Wed 
01-08 17:30:35.230: I/Adreno200-EGL(14821): Local Branch: 
01-08 17:30:35.230: I/Adreno200-EGL(14821): Remote Branch: m/jb_rel_2.0.3 
01-08 17:30:35.230: I/Adreno200-EGL(14821): Local Patches: NONE 
01-08 17:30:35.230: I/Adreno200-EGL(14821): Reconstruct Branch: AU_LINUX_ANDROID_JB_REL_2.0.3_RB3.04.01.01.42.002 + NOTHING 
01-08 17:30:35.310: E/ViewRootImpl(14821): performLayout : host is null 
01-08 17:30:35.330: E/ViewRootImpl(14821): performLayout : host is null 
01-08 17:30:35.340: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(0, 0 - 480, 800) 
01-08 17:30:40.620: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(0, 0 - 480, 800) 
01-08 17:30:40.840: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:41.040: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:41.250: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:41.450: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:41.670: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:41.920: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:42.220: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:42.660: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:43.280: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:43.860: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:44.390: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:44.690: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 
01-08 17:30:45.090: D/HardwareRenderer(14821): draw surface is valid dirty= Rect(15, 110 - 240, 800) 

日志猫这场平局声明重演,当我触摸屏幕。我不确定我错过了什么;无论大事还是傻事。如何让我的凸轮图像以上述风格设置?任何帮助将不胜感激的家伙。提前致谢。

P.S:我使用两个同步列表视图来显示图像,它们可以同时滚动。

+0

这看起来像一个gridview而不是listview – Raghunandan

+0

你必须使用GridView而不是ListView这种类型的Pinterest风格 – Piyush

+0

但我已经使用可绘制文件夹中的图像的列表视图实现了上述风格。 – San

退房StaggerdGridView这是相同的,你需要和易于实施。

+0

会尝试,让你知道。谢谢。 – San

+0

我相信它需要两个支持库,而不是默认的库。我使用Eclipse,它会引发一些错误。我在哪里可以找到这些图书馆? – San

+0

您是否已将其库项目添加到项目中? @San 3 – GrIsHu