我有一个网格视图,可以将特定文件夹中的所有图像加载到自身中。我试图得到它,以便当用户单击网格视图中的单个图像时,它在图像视图中设置自身的放大版本。我认为我需要尝试做的是在创建网格视图并将图像加载到其中时,我需要将数组附加到在gridview中保存图像的imageview以及它在SD卡中的位置。所以当加载图像时;保存图像的位置并将其附加到gridview中的imageview。到目前为止,我将从SD卡加载的最后一张照片加载到放大的图像视图中。
Main.java
public class Main extends Activity{
ImageView photoHolder;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
photoHolder = (ImageView) findViewById(R.id.photoHolderView);
photoHolder.setVisibility(View.GONE);
GridView gridView = (GridView) findViewById(R.id.grid_view);
gridView.setVisibility(View.VISIBLE);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> a, View view, int position, long id) {
photoHolder.setVisibility(View.VISIBLE);
photoHolder.setImageURI(ImageAdapter.uri);
}
});
}
}
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
public static Uri uri;
private Context mContext;
File root = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Custom" + File.separator);
private File[] fileName = root.listFiles();
int count = fileName.length;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return fileName.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
uri = Uri.fromFile(fileName[position]);
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some
// attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageURI(uri);
return imageView;
}
}
另一方面,由于内存泄漏,它崩溃了很多,不知道如何在从SD卡加载时创建“样本/缩略图”大小的图像?
答案 0 :(得分:0)
您说得对,需要跟踪每个缩略图的文件/位置。最简单的方法是修改getView
方法并添加一行:
imageView.setImageURI(uri);
imageView.setTag(uri); //new line added
return imageView;
然后,在onItemClickListener
中,您获得点击的图片查看 - 并获取其标记 - 这将是SD卡上的文件名:
public void onItemClick(AdapterView<?> a, View view, int position, long id) {
photoHolder.setVisibility(View.VISIBLE);
photoHolder.setImageURI((Uri)view.getTag());
}
至于加载位图时的内存问题,您可以使用BitmapFactory.Options
来指示缩放系数 - 在Android开发者网站上查看this page - 它包含您需要的示例代码。 / p>