我目前有下面的代码,它转到指定的网址,下拉任何图像,将其转换为位图,然后在imageView中显示它。
但是,我注意到当我滚动浏览包含这些位图的listView时;滚动变得不稳定(因为正在渲染多个位图)。
我的问题是。考虑到下面的代码,我如何将下载的位图转换为png / jpeg格式并在imageView中显示?因此listView的滚动将不再是生涩。
我不想将其保存到文件中,然后从手机加载该文件,因为一次可能会下载100多张图片。
位图代码:
//This downloads the image from thr url passed, and converts into a bitmap format; so that android compilers can read it and then display it.
private Bitmap GetImageBitmapFromUrl(string url)
{
Bitmap imageBitmap = null;
// bmp.compress(Bitmap.CompressFormat.PNG, 100, out); //100-best quality
using (var webClient = new WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0)
{
imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
}
}
return imageBitmap;
}
我如何将它绑定到imageView:
var imageBitmap = GetImageBitmapFromUrl(item.imgURL);
view.FindViewById<ImageView>(Resource.Id.Image).SetImageBitmap((Bitmap.CreateScaledBitmap(imageBitmap, 100, 100, false)));
答案 0 :(得分:0)
我玩过loooooooooads试图让它高效工作,我还没有找到一个足够好的解决方案,除了保存它们。基本上,您可以尝试保存所有然后可能在渲染发生后设置删除,或者可能在所有图像都已渲染后?我将所有图像保存在我的SD卡上,但它们每个只有100kb,但我确实每个“使用”中有400个,但在8gb SD卡上仍然只有40mb。
答案 1 :(得分:0)
图像的急动与用于显示图像的格式无关。将图像设置为ImageView时,无论如何它们都会在内部转换为位图。这里的核心是确保您不使用大于您需要的图像。例如,如果您的ImageView宽度为100x100像素并且您正在下载1000x1000像素的图像,则将其设置为ImageView可用于显示目的,但会使用太多内存。相反,您应下载图像,缩放图像以匹配ImageView的大小,然后回收原始位图。
由于内存占用空间小得多,所以急躁不太明显。