在我的ListView中,每行都有一个ImageView和两个TextView。 ListView的图片是从我的Galaxy Nexus的内存中加载的。我已经使用
将其缩小到100x100Bitmap scaled = Bitmap.createScaledBitmap(de, 80, 80, true);
但仍需要几秒钟才能加载。
我该怎么办?
编辑:
public Bitmap resizeBitmap(String path){
BitmapFactory.Options options = new BitmapFactory.Options();
InputStream is = null;
try {
is = new FileInputStream(path);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BitmapFactory.decodeStream(is,null,options);
try {
is.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
is = new FileInputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// here w and h are the desired width and height
options.inSampleSize = Math.max(options.outWidth/100, options.outHeight/100);
// bitmap is the resized bitmap
Bitmap bitmap = BitmapFactory.decodeStream(is,null,options);
return bitmap;
}
答案 0 :(得分:1)
第一点我可以从你的代码中看到你正在解码流两次......它被解码的第一个地方甚至没有在任何地方使用....所以删除该语句将提高代码的执行速度
//BitmapFactory.decodeStream(is,null,options); comment this line
try {
is.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
我也可以问你为什么不能使用图片的缩略图?而不是调整每个图像的大小....如果您试图在您的应用程序中显示图像的缩略图
是的,有一整张表存储了您需要通过Cursor api访问它的图像的拇指按钮,例如:
Cursor mediaCursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
null, null);
从此光标您可以获取imageId,然后在图像ID的帮助下,您可以使用MediaStore.Images.Thumbnails.getThumbnail()
方法检索图像的缩略图,例如,下面是一些有用的代码:
Bitmap thumbBitmap = null;
thumbBitmap = MediaStore.Images.Thumbnails.getThumbnail(cr, imageID, MediaStore.Images.Thumbnails.MICRO_KIND, null);
if(thumbBitmap != null){
return new BitmapDrawable(thumbBitmap);
}
答案 1 :(得分:0)
有效地在ListView中显示位图是一项相当复杂的任务,涉及很多变量。我建议你阅读this并下载他们提供的代码示例。这是一个很好的起点,在简单的情况下可能足以复制粘贴。
答案 2 :(得分:0)
最好的方法是在AsyncTask
中加载它们。在这里,您有一个很棒的视频,显示了这种方法:
https://developers.google.com/events/io/2012/sessions/gooio2012/103/