2014-01-08 106 views
1

圖片我想實現一個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

回答

1

退房StaggerdGridView這是相同的,你需要和易於實施。

+0

會嘗試,讓你知道。謝謝。 – San

+0

我相信它需要兩個支持庫,而不是默認的庫。我使用Eclipse,它會引發一些錯誤。我在哪裏可以找到這些圖書館? – San

+0

您是否已將其庫項目添加到項目中? @San 3 – GrIsHu