无法设置在ListView中
问题描述:
图片我想实现一个Pinterest的风格的图像视图象下面这样:无法设置在ListView中
我想要的图像从我的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:我使用两个同步列表视图来显示图像,它们可以同时滚动。
这看起来像一个gridview而不是listview – Raghunandan
你必须使用GridView而不是ListView这种类型的Pinterest风格 – Piyush
但我已经使用可绘制文件夹中的图像的列表视图实现了上述风格。 – San