0

我只是想将预定文件中的照片添加到 a 中GridView,但我不知道该怎么做。我有一个Adapter处理GridView我从 这个例子中学到的东西,但我无法弄清楚如何将 mThumbIds 数组设置为文件中的图像。我想我必须使用类似的东西:ImageView.setImageUri(Uri.fromFile(new File("myPath")));而不是setImageResource但我可能是错的。这是我第一次做这样的事情,任何帮助都将不胜感激!

编辑:

当前代码:(有了这个,我得到了一个 NullPointer:for(File f : dir.listFiles()){在文档中它说如果它不是目录,它会返回 null。new File(...) 中的代码与我用来创建目录的代码相同,所以我知道路径是正确的,当应用程序启动时,它会在文件夹中创建没有图片的目录,直到用户拍摄一张。我当时认为这是问题,但是当目录中有照片时它仍然会关闭。)

public static class HomeFragment extends Fragment{

    public HomeFragment(){

    }
    View rootView;
    GridView gridView;
    List<Drawable> list;
    File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "MyAppFolder");
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup contatiner,
            Bundle savedInstanceState){

        for(File f : dir.listFiles()){
            Bitmap original = BitmapFactory.decodeFile(f.getAbsolutePath());
            Drawable drawable = new BitmapDrawable(getResources(), original);
            list.add(drawable);
        }
        rootView = inflater.inflate(R.layout.home_layout,
                contatiner, false);
        gridView = (GridView) rootView.findViewById(R.id.homeGridView);
        gridView.setAdapter(new HomeAdapter(getActivity(), list));


        return rootView;
    }

}


public class HomeAdapter extends BaseAdapter {
private Context mContext;
private List<Drawable> mPictures;

public HomeAdapter(Context c, List<Drawable> list) {
    mContext = c;
    mPictures = list;
}

public int getCount() {
    return mPictures.size();
}

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

public long getItemId(int position) {
    return 0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) { 
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(110, 110));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageDrawable(mPictures.get(position));
    return imageView;
}
}
4

1 回答 1

2

您可以使用以下方式获取位图BitmapFactory.decodeFile(filePath)

Bitmap original = BitmapFactory.decodeFile(filePath);

// Scale the Bitmap if needed       
Bitmap scaled = Bitmap.createScaledBitmap(original, newWidth, newHeight, true);

要从此位图创建 Drawable:

// Use mContext.getResources if you are doing this in the Adapter
Drawable drawable = new BitmapDrawable(getResources(), scaled);

更改:type_mThumbIds

private Drawable[] mThumbIds = { drawable1, drawable2, drawable3....... };

使用ImageView.setImageDrawable(Drawable)

imageView.setImageDrawable(mThumbIds[position]);

更好的方法是mThumbIds在 Activity 中创建数组,并在初始化时将其作为参数传递ImageAdapter。您需要更改ImageAdapter's构造函数。

编辑1:

您可以使用 aList<Drawable>来克服未知尺寸问题。我将假设您能够Drawable使用上述信息创建对象并对其进行初始化:

Drawable d1 = ....
Drawable d2 = ....
Drawable d3 = ....
....
....

List<Drawable> list = new ArrayList<Drawable>();
list.add(d1);
list.add(d2);
....

gridview.setAdapter(new ImageAdapter(this, list));

ImageAdapter's将您的代码更改为:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    private List<Drawable> mThumbIds;

    public ImageAdapter(Context c, List<Drawable> list) {
        mContext = c;
        mThumbIds = list;
    }

    public int getCount() {
        return mThumbIds.size();
    }

    ....
    ....

ImageAdapter's getView()

imageView.setImageDrawable(mThumbIds.get(position));

消除:

private Integer[] mThumbIds = { ..... };
于 2013-08-14T19:33:27.557 回答