我有什么
我在活动中有一个“打开图像对话框”。此“对话框”仅显示文件夹和兼容图像。为此,我有一个带有gridview的图层,我填充了包含图像和文本的行。
文本用于文件名称,图像用于预览图像。
我的问题
如果我看到的文件夹没有大量图像,则对话框效果很好。我正在研究SII,当我尝试打开相机相册(8Mpx的照片)时,我的代码变得很慢,即使每次重新绘制新行也是如此。
我的代码
我认为主要问题在于预览图像的创建,因为如果删除这部分,一切正常。对于图像,我有:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View grid;
if(convertView==null){
grid = new View(mContext);
LayoutInflater inflater=getLayoutInflater();
grid=inflater.inflate(R.layout.row, parent, false);
}else{
grid = (View)convertView;
}
ImageView icon = (ImageView)grid.findViewById(R.id.file_image);
TextView label = (TextView)grid.findViewById(R.id.file_text);
label.setText(item.get(position));
if (item.get(position).equals("/")){
icon.setImageResource(R.drawable.folderupup);
}else if (item.get(position).endsWith("../")) {
icon.setImageResource(R.drawable.folderup);
}else if (item.get(position).endsWith("/")) {
icon.setImageResource(R.drawable.folder);
}else{
Bitmap b = BitmapFactory.decodeFile(path.get(position));
Bitmap b2 = Bitmap.createScaledBitmap(b, 55, 55, false);
icon.setImageBitmap(b2);
}
return grid;
}
}
答案 0 :(得分:0)
在某个地方,代码会调用它(数据是图像的完整路径名):
DiskLruCache.Editor editor = mHttpDiskCache.edit(key);
if (editor != null) {
if (downloadUrlToStream(data,editor.newOutputStream(DISK_CACHE_INDEX))) {
editor.commit();
} else {
editor.abort();
}
}
因为我不知道如何改变它,所以我现在修改了url受体,而不是从网上读取它从文件中读取的内容:
public boolean downloadUrlToStream(String urlString, OutputStream outputStream) {
disableConnectionReuseIfNecessary();
HttpURLConnection urlConnection = null;
BufferedOutputStream out = null;
BufferedInputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(new File(urlString)), IO_BUFFER_SIZE);
out = new BufferedOutputStream(outputStream, IO_BUFFER_SIZE);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
return true;
} catch (final IOException e) {
Log.e(TAG, "Error in downloadBitmap - " + e);
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (final IOException e) {}
}
return false;
}
但是gridview加载图像的速度非常慢。我认为这是因为最后一种方法。我怎样才能做得更好?
答案 1 :(得分:0)
最后,我做了所有Android页面所说的内容而没有为缓存做任何事情。现在列表加载速度很快。也许我可以添加一个内存缓存,因为文辉指出,但它是如此之快,以至于我的目的无关紧要。
测试已在SII上完成,文件夹包含大约400个8Mpx
的文件夹