Android - 将图像传递给其他活动,调整大小并保持质量

时间:2014-04-15 08:18:19

标签: android json listview clickable

我有一个listview,从json获取新闻缩略图和标题。 我想通过点击listview项目在其他活动中显示新闻正文和更大的图像。下面的代码将图像发送到其他活动。

secilenresim= (ImageView)view.findViewById(R.id.mansetresim);                       
secilenresim.buildDrawingCache();
Bitmap image= secilenresim.getDrawingCache();                       
Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", image); 

//// the code below gets the image in new activity

haberresim=(ImageView)findViewById(R.id.haberresim);
haberresim.getLayoutParams().height = 300; 
haberresim.getLayoutParams().width = 400;
Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");
haberresim.setImageBitmap(bmp);

一切正常。但新活动的图像质量太差了。而图像源(来自json并由毕加索库加载)很好,图像分辨率为600 * 400像素。如何将图像传递给其他活动并保持质量?

2 个答案:

答案 0 :(得分:0)

如果您使用毕加索,您的图像会下载一次,然后保存在内存中,甚至是光盘缓存。因此,您不必通过bundle传递位图,而只需通过JSON传递位图。

在您的详情活动中,您可以再次通过毕加索请求更大的图像查看图像。

如果启用了picasso debug标志,您可以检查图像是从缓存还是网络加载的:

picasso.setDebugging(true)

答案 1 :(得分:0)

getDrawingCache()可能会获得低质量的图像。

改变它的使用:

secilenresim.setDrawingCacheQuality(DRAWING_CACHE_QUALITY_HIGH);

您可以使用getDrawingCacheQuality()检查您的质量。它可以是其中之一:

  • DRAWING_CACHE_QUALITY_AUTO
  • DRAWING_CACHE_QUALITY_LOW
  • DRAWING_CACHE_QUALITY_HIGH

修改

在构建它之前似乎secilenresim.destroyDrawingCache();可能也很有帮助