80,476
社区成员
发帖
与我相关
我的任务
分享


@Override
protected void onDestroy() {
super.onDestroy();
for (int i = 0; i < bmp.length; i++) {
if (bmp[i] != null) {
bmp[i].recycle();
bmp[i] = null;
}
}
System.gc();
}/**
* 判断GridView是否停止滑动
**/
private void isGridViewStop() {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;// 图片宽高都为原来的4分之一,即图片为原来的16分之一
gvSelect.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:// 滑动停止
for (; start_index < end_index; start_index++) {
try {
if (bmp[start_index] == null) {// 优化读取本地图片
bmp[start_index] = BitmapFactory.decodeFile(
imagePath[start_index], options);
// 对原位图进行缩放
bmp[start_index] = Bitmap.createScaledBitmap(
bmp[start_index], 165, 165, true);
}
} catch (Exception e) {
Log.d("空指针1", bmp[start_index] + "");
}
}
adapter.notifyDataSetChanged();
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 滚动
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 设置当前屏幕显示的起始index和结束index
start_index = firstVisibleItem;
end_index = firstVisibleItem + visibleItemCount;
}
});
}private final class TakePictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
Toast.LENGTH_LONG).show();
return;
} else {
Log.d("解码", "0*******");
// 解码指定字节数组中的一个不变的位图
bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
Log.d("解码", "1*******");
Intent starEdit = new Intent(PhotographActivity.this,
ConfirmActivity.class);
startActivity(starEdit);
}
}
} private final class TakePictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
Toast.LENGTH_LONG).show();
return;
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
Log.d("解码", "data.length=" + data.length);
// 解码指定字节数组中的一个不变的位图
ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
Log.d("解码", "1*******");
Intent starEdit = new Intent(PhotographActivity.this,
ConfirmActivity.class);
startActivity(starEdit);
}
}
}[/quote]
现在的手机,拍的照片质量非常高,压缩一点,肉眼看上去不会出现明显的失真的. private final class TakePictureCallback implements PictureCallback {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
// 检测sd是否可用
Toast.makeText(PhotographActivity.this, "没有SD卡或SD卡不可用!",
Toast.LENGTH_LONG).show();
return;
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 图片宽高都为原来的2分之一,即图片为原来的4分之一
Log.d("解码", "data.length=" + data.length);
// 解码指定字节数组中的一个不变的位图
ConfirmActivity.bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
Log.d("解码", "1*******");
Intent starEdit = new Intent(PhotographActivity.this,
ConfirmActivity.class);
startActivity(starEdit);
}
}
}
[/quote]
清晰高是追求的目标罢了,android不像ios,有很大的内在可控.
现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.
朋友问下这个memoryCacheSize的设置是哪个类里面的方法啊,弄了半天没弄出来
[/quote]
额,朋友,我的意思是设置内存大小,方法,不记得,你百一下,因为我正在写代码用到imageloader,所以,就写了这几个词.
不过,如果你有大量图片下载或从本地读取,都可以用imageloader,它可以设置memoryCacheSize.


[/quote]
清晰高是追求的目标罢了,android不像ios,有很大的内在可控.
现在的android手机,高清的照相机,拍出来的照片都几M一张,android的内存,开发人员也不能随便控制.本身这是android的短板.
你再试试设置memoryCacheSize,把它设置大一些,但我觉得,不对图片进行压缩处理,这个问题还是不能解决,更何况,应用中图片显示和操作多的话,就更容易OOM了.