2014-02-26 124 views
0

我有一个网格视图,它将所有图像从一个特定的文件夹加载到它自己。我试图获得它,以便当用户单击网格视图内的单个图像时,它会在图像视图中设置其自身的放大版本。我认为我需要尝试做的事情是创建网格视图并将图像加载到该网格视图中时,我需要将一个数组附加到在gridview中创建的imageview中创建的imageview以及它在SD卡中的位置。所以当一个图像加载时,保存图像的位置并将其附加到gridview中的imageview。到目前为止,我已将从SD卡加载的最后一张照片加载到放大的图像视图中。从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

你说得对,你需要跟踪每个缩略图的文件夹/位置。最简单的方法是修改您的getView方法,并添加一行:

imageView.setImageURI(uri); 
imageView.setTag(uri); //new line added 
return imageView; 

然后,在你onItemClickListener你得到的点击ImageView的 - 并获得它的标签 - 这将是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 - 它包含了你所需要的示例代码。

+0

非常感谢您的帮助。得到它所有的工作和排序:) – user2756111