- 浏览: 60751 次
- 性别:
- 来自: 南京
最新评论
-
cuixuelei:
图形中RChart Demo 字样,怎么去掉
android饼状图表 -
Mr.Cheney:
代码太乱了
gallery加载大量图片时内存溢出的解决方法(一) -
ygswine:
最后一点是否可以在发送QQ邮箱,成功后程序关闭,在Activi ...
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录) -
zxuenet:
erwin_king 写道因为这个时收费的,所以会有的demo ...
android饼状图表 -
mvpstevenlin:
博主,麻烦发一份我学习吧 1577360984@qq.com, ...
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)
这只是我以前开始搞android事留下的代码,发现还是存在问题的,我现在把代码放出来,仅供参考,如没有帮助就不要看了,
Gallery加载大量图片的时候容易内存溢出,但是如果及时回收不用的图片,在使用的时候再重新加载,这样就不会出现内存溢出的现象了,所以一定要将加载图片的地址保存起来,在加载图片的时候将生成的bitmap对象用图片地址的字符串保存在map里,不用的时候再根据key值回收。
下面是实现的几个主要部分
1、工具类
public class ImageManager {
static int index = 0;
public static ConcurrentHashMap<String, Bitmap> imageMap = new ConcurrentHashMap<String, Bitmap>();
public static String ISFALSE="ISFALSE";
public static String ISTRUE="ISTRUE";
public static List<String[]> getSD(String dir) {
List<String[]> it = new ArrayList<String[]>();
File f = new File(dir);
File[] files = f.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
String[] s = new String[2];
File file = files[i];
if (file.isFile()) {
if (getImageFile(file.getPath())) {
System.out.println("file " + String.valueOf(file));
s[0] = file.getPath();
s[1] = file.getName();
it.add(s);
}
} else if(file.isDirectory()){
System.out.println("file.isDirectory() " + file.getAbsolutePath());
getSD(String.valueOf(file.getAbsolutePath()));
}
}
}
return it;
}
public static boolean getImageFile(String fName) {
boolean re;
String end = fName
.substring(fName.lastIndexOf(".") + 1, fName.length())
.toLowerCase();
if (end.equals("jpg") || end.equals("gif") || end.equals("png")
|| end.equals("jpeg") || end.equals("bmp")) {
re = true;
} else {
re = false;
}
return re;
}
public static Bitmap getImage(String fileName) {
try {
File file = new File(fileName);
Bitmap bitmap = null;
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
addImage(fileName, bitmap);
return bitmap;
} catch (Exception e) {
return null;
}
}
public static Bitmap getRefImage(String fileName) {
try {
File file = new File(fileName);
Bitmap bitmap = null;
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
addImage(fileName, bitmap);
return createReflectionImageWithOrigin(fileName, bitmap);
} catch (Exception e) {
return null;
}
}
public static void addImage(String uri, Bitmap bitmap) {
imageMap.put(uri.toString(), bitmap);
}
private static void clearBitmap(String uri) {
if (imageMap.get(uri) != null) {
System.out.println("remove image:" + uri);
imageMap.get(uri).recycle();
imageMap.remove(uri);
}
}
// 清空左边到0、右边到最后,保留中间
public static List<ImageMessage> clearImage(List<ImageMessage> imageList,
int start, int end) {
if (start >= 0 && end < imageList.size()) {
for (int i = 0; i < start; i++) {
if (imageList.get(i).getIsNull().equals(ISFALSE)) {
imageList.get(i).setIsNull(ISTRUE);
clearBitmap(imageList.get(i).getPath().toString());
clearBitmap(imageList.get(i).getPath().toString() + "1");
clearBitmap(imageList.get(i).getPath().toString() + "2");
imageList.get(i).setImage(null);
}
}
for (int i = end + 1; i < imageList.size(); i++) {
if (imageList.get(i).getIsNull().equals(ISFALSE)) {
imageList.get(i).setIsNull(ISTRUE);
clearBitmap(imageList.get(i).getPath().toString());
clearBitmap(imageList.get(i).getPath().toString() + "1");
clearBitmap(imageList.get(i).getPath().toString() + "2");
imageList.get(i).setImage(null);
}
}
}
return imageList;
}
// 获得带倒影的图片方法
public static Bitmap createReflectionImageWithOrigin(String str,
Bitmap bitmap) {
final int reflectionGap = 0;//原图片与倒影图片之间的缝隙
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,
width, height / 2, matrix, false);
addImage(str + "1", reflectionImage);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888);
addImage(str + "2", bitmapWithReflection);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
- LoadingImage.rar (76.6 KB)
- 下载次数: 292
评论
发表评论
-
android 使用des算法
2012-02-09 12:52 1969转自:http://www.linuxidc.com/Linu ... -
Toast显示图片
2012-02-02 12:56 1469转自:http://blog.csdn.net/ling ... -
文字中间加横线效果
2012-02-02 11:00 1940priceTV.setText("价格:2.00 ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(apn操作)
2011-11-08 12:51 1387static Uri uri = Uri.parse(&qu ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(gps操作)
2011-11-08 12:48 1584public static String getCityNam ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)
2011-11-08 12:46 3056首先声明者只是一个个 ... -
Android Activity界面切换添加动画特效
2011-06-14 13:48 1214在Android 2.0之后有了overridePending ... -
android 权限介绍(二)
2011-06-02 17:08 1016SYSTEM_ALERT_WINDOW 允许 ... -
android 权限介绍(一)
2011-06-02 17:00 836Manifest.permission 这个类定义了andro ... -
编写高效的Android代码(提高运行速度,节省电量)
2011-06-02 16:28 1365编写高效的Android代码( ... -
[整理]Selector、shape详解
2011-06-02 15:15 4215Selector、shape详解(一) Selector的结 ... -
[转帖]Android自定义Activity漂亮跳转效果
2011-05-31 20:10 1285Android自定义Activity漂亮跳转效果 ... -
gallery加载大量图片时内存溢出的解决方法(三)
2011-05-31 19:14 20326、ImageAdapter public class Im ... -
gallery加载大量图片时内存溢出的解决方法(二)
2011-05-31 18:56 2568Paint deafalutPaint = new Paint ... -
ListView学习(三) 加载视野内的数据
2011-05-31 17:13 1783在滑动的过程中,只有在视野中的item才会加载数据,其他的其实 ... -
ListView学习(二) 点击条目隐藏展开正文
2011-05-28 00:00 3829本篇是listview条目点击展开或者隐藏内容,本文参照了an ... -
[整理] 操作通话记录(一)
2011-05-25 11:31 1891/* *为了方便后面页面的封装,这里定义了一个实体类 ... -
[整理] 操作通话记录(二)
2011-05-25 11:25 1128//处理时间 public String for ... -
android饼状图表
2011-05-15 15:12 4193相信图表再很多统计应 ... -
ListView学习(一) 滑动分页时底部显示进度条
2011-05-15 14:24 2659我们在使用listview时难免会遇到分页的情况,既然是分页, ...
相关推荐
在Android应用中,Gallery(画廊)组件被广泛用于展示和浏览图片,但由于图片文件通常较大,特别是高清图片,当用户需要浏览大量图片时,容易导致内存溢出,严重影响用户体验和应用稳定性。 #### Android应用架构与...
在Android开发中,"gallery加载大图片可以更换sd卡路径不溢出有倒影效果"这一主题涉及到几个关键知识点:图片加载优化、内存管理、SD卡存储以及倒影效果的实现。下面将逐一进行详细解释。 1. 图片加载优化: 当...
只加载当前停止页面的图片是一种有效的策略,可以避免一次性加载过多图片导致内存溢出。这可能通过监听Gallery的滚动事件并在需要时加载图片来实现。 4. **图片缓存**:为提升性能和用户体验,网络图片通常会被缓存...
在Android开发中,图片加载是一个常见的需求,尤其是在创建一个类似画廊(Gallery)的应用时,用户通常希望可以滚动浏览大量的网络图片。`Android应用源码 Gallery实现异步加载网络图片`是一个典型的问题,它涉及到...
然而,直接加载网络图片到Gallery中会带来性能问题,因为这可能导致大量的网络请求,消耗大量内存,并可能造成应用卡顿。为了解决这个问题,我们需要异步加载图片,即在后台线程下载图片,然后在UI线程更新显示,以...
5. **图片处理**:在加载网络图片时,可能需要根据设备屏幕尺寸和Gallery的大小进行适当的缩放,以避免加载过大图片导致内存溢出。 6. **图片占位符**:在图片真正加载之前,可以显示一个占位符,如一个加载动画或...
在Gallery中,关键在于处理好滚动时的图片加载逻辑,防止内存溢出。 4. **只加载当前停止页面图**: 这种策略被称为懒加载(Lazy Loading),它意味着只有当图片所在的页面进入可视区域时才开始加载。这样可以显著...
在Android开发中,"android Gallery 3d 图片浏览 oom"是一个常见的问题,尤其是在处理大量图片时。oom,全称是Out Of Memory,即内存溢出错误,当应用程序分配的内存超过系统能提供的范围时,就会触发这个错误。本文...
在Android开发中,处理大量图片时常常会遇到内存溢出(Out of Memory)的问题,...通过以上策略,可以有效解决Android应用在加载大量图片时可能出现的内存溢出问题,同时优化虚拟机内存使用,提升应用的稳定性和性能。
使用`decodeFile()`方法可以从文件路径加载图片,然后可以通过` BitmapFactory.Options`控制内存使用,避免内存溢出。 3. **自定义Gallery视图**:Android原生的`Gallery`组件在Android 3.0(API级别11)之后已被弃...
比如,使用LruCache或其他内存缓存策略,避免一次性加载所有图片导致内存溢出;使用低分辨率的缩略图减少内存占用;并确保在图片不再需要时正确释放资源。 9. **用户界面设计** 良好的拖放体验需要直观的视觉反馈...
4. **图片压缩**:加载大图可能导致内存溢出,因此需要在加载前对图片进行压缩处理,控制其占用的内存大小。 5. **占位符和错误图**:在图片加载过程中显示占位符,加载失败时显示错误图,提供良好的用户体验。 6....
在Android开发中,获取并处理图片是一项常见的任务,但如果不进行优化,可能会导致内存溢出、性能下降等问题。本文将详细探讨如何优化从系统Camera和Gallery获取图片的过程,以提高应用的性能和用户体验。 首先,...
4. ** Glide / Picasso / Fresco**:这些是流行的图片加载库,可以帮助开发者高效地加载和缓存网络或本地的图片,避免内存溢出并优化性能。在图片轮播中,它们可以无缝集成到ViewPager中,实现动态加载和显示图片。 ...
在Android应用开发中,图片加载是一项关键且技术性较强的任务,尤其在处理大量图片或大尺寸图片时,如何实现高效、流畅的异步加载显得尤为重要。"Android图片异步加载大全"这个项目提供了多种场景下图片加载的示例,...
这些库可以缓存图片,避免内存溢出,同时支持异步加载和占位符,提高用户体验。 5. **Adapter与数据绑定**: 图片滑动效果通常与Adapter结合使用,如PagerAdapter或RecyclerView.Adapter。Adapter负责将数据集(如...
这种方法结合了引用管理和图片处理,有效解决了因大图片导致的内存溢出问题。 总之,Android开发者在处理大图片时,必须注意内存的合理使用,避免内存泄露和溢出。通过优化图片加载策略、管理Bitmap引用以及适当地...