做相册
自己写了个ImageAdapter,里面主要是读取指定文件夹下的图片
在Main中有个Gallery显示图片。
问题一:文件夹下图片过多会出现内存溢出,请问要怎样解决呢?(自己想了一下,用分页来做。
方法1、没页显示10张,在浏览第二页时,清空第一页,加载第三页,但是不知道如何在Gallery去触发分页这个操作,还有就是某张图片太大在这页也会出现内存溢出。
方法2、以大小分,大于8M就挂掉,就是不知道怎样去做)
问题二:再点击某张图片时如何放大到和屏幕一样大,用Activity或者Dialog来做显示放大后的图片也可以
请教各位大侠有什么办法么?
请附上详细源码讲解,我是java初学者Android也是初学者,很多东西都不太明白,不能留言的Q我也可以的:445966360(注明Android)
Main.java
//程序主界面
public class Main extends MyActivity {
private Gallery myGallery;//图片显示区域
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ui();
}
public void ui() {
setContentView(R.layout.main);
binding();
listeners();
}
// 控件与组件绑定
public void binding() {
myGallery = (Gallery) findViewById(R.id.myGallery);
myGallery.setAdapter(new ImageAdapter(this, "/sdcard/a"));
}
// 为组建 添加监听器
public void listeners() {
myGallery.setOnItemClickListener(new Functional());
}
// 组件 事件功能实现
private class Functional implements OnItemClickListener {
// 图片浏览
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
}
}
}
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private List<Bitmap> imageList = new ArrayList<Bitmap>();
public ImageAdapter(Context c, String url) {
Image(url);
mContext = c;
}
public int getCount() {
return imageList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View v, ViewGroup parent) {
ImageView imageview = new ImageView(mContext);
imageview.setImageBitmap(imageList.get(position));
imageview.setLayoutParams(new Gallery.LayoutParams(120, 220));
imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
return imageview;
}
public void Image(String url) {
File fUrl = new File(url);
File[] imageFiles = fUrl.listFiles(new FileFilter() {
public boolean accept(File f) {
String fileName = f.getName();
String ex = f.getName().substring(
fileName.lastIndexOf(".") + 1, fileName.length())
.toLowerCase();
if (ex == null || ex.length() == 0) {
return false;
} else {
if (ex.equals("jpg") || ex.equals("bmp")
|| ex.equals("png") || ex.equals("gif")) {
return true;
}
return false;
}
}
});
if (imageFiles == null || imageFiles.length == 0) {
return;
} else {
for (int i = 0, sum = imageFiles.length; i < sum; i++) {
File file = imageFiles[i];
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 4;
Bitmap btp = BitmapFactory.decodeFile(file.getAbsolutePath(),options);
imageList.add(btp);
}
notifyDataSetChanged();
}
}
}