- 浏览: 59042 次
- 性别:
- 来自: 南京
最新评论
-
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 1925转自:http://www.linuxidc.com/Linu ... -
Toast显示图片
2012-02-02 12:56 1421转自:http://blog.csdn.net/ling ... -
文字中间加横线效果
2012-02-02 11:00 1823priceTV.setText("价格:2.00 ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(apn操作)
2011-11-08 12:51 1296static Uri uri = Uri.parse(&qu ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(gps操作)
2011-11-08 12:48 1544public static String getCityNam ... -
开机实现将手机联系人、通话记录、手机号码、手机所在地、发送到指定邮箱里,失败则发送短信到指定手机之(获取联系人和电话号码、通话记录)
2011-11-08 12:46 2975首先声明者只是一个个 ... -
Android Activity界面切换添加动画特效
2011-06-14 13:48 1178在Android 2.0之后有了overridePending ... -
android 权限介绍(二)
2011-06-02 17:08 981SYSTEM_ALERT_WINDOW 允许 ... -
android 权限介绍(一)
2011-06-02 17:00 796Manifest.permission 这个类定义了andro ... -
编写高效的Android代码(提高运行速度,节省电量)
2011-06-02 16:28 1255编写高效的Android代码( ... -
[整理]Selector、shape详解
2011-06-02 15:15 4132Selector、shape详解(一) Selector的结 ... -
[转帖]Android自定义Activity漂亮跳转效果
2011-05-31 20:10 1242Android自定义Activity漂亮跳转效果 ... -
gallery加载大量图片时内存溢出的解决方法(三)
2011-05-31 19:14 20036、ImageAdapter public class Im ... -
gallery加载大量图片时内存溢出的解决方法(二)
2011-05-31 18:56 2509Paint deafalutPaint = new Paint ... -
ListView学习(三) 加载视野内的数据
2011-05-31 17:13 1741在滑动的过程中,只有在视野中的item才会加载数据,其他的其实 ... -
ListView学习(二) 点击条目隐藏展开正文
2011-05-28 00:00 3782本篇是listview条目点击展开或者隐藏内容,本文参照了an ... -
[整理] 操作通话记录(一)
2011-05-25 11:31 1845/* *为了方便后面页面的封装,这里定义了一个实体类 ... -
[整理] 操作通话记录(二)
2011-05-25 11:25 1083//处理时间 public String for ... -
android饼状图表
2011-05-15 15:12 4147相信图表再很多统计应 ... -
ListView学习(一) 滑动分页时底部显示进度条
2011-05-15 14:24 2615我们在使用listview时难免会遇到分页的情况,既然是分页, ...
相关推荐
针对Android应用中Gallery内存溢出的解决方案
gallery加载大图片可以更换sd卡路径不溢出有倒影效果
android Gallery实现异步加载网络图片 并只加载当前停止页面图
android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip
Gallery异步加载图片和listView动态刷新 .rar
Gallery异步加载当前页图片,记住Gallery滑动的时候不会去下载全部的图片,只有停留在当前页的图片才会下载加载,这样大大的节约了用户流量
NULL 博文链接:https://zheyiw.iteye.com/blog/1561121
本项目为一款基于Android的Gallery应用,实现了异步加载网络图片的功能,同时具备仅加载当前停止页面图片的特性,有效节省用户流量和提高应用性能。 **功能特点**: 1. **异步加载**:利用Android的AsyncTask或...
listview,gallery加载网络图片的好的开源库,已经试用了,效果挺好的
gallery实现异步加载图片demo解决卡的问题
Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
使用Gallery控件实现刷新加载和分页加载,给需要的朋友提供一个参考思路,不要分。
android Gallery实现异步加载网络图片 并只加载当前停止页面图.rar
ImageLoader开源框架加载图片,完整例子包括ListView的图片加载、GridView的图片加载、Gallery画廊的图片加载,用的时候间谍配置权限
Android应用源码Gallery实现异步加载网络图片,并只加载当前停止页面
ViewPagerl加载网络图片实现gallery效果
gallery 加载完图片后,自动滚动到左对齐