在我的应用程序中,我有列表视图,列表中的每个项目都包含一个图像视图。使用
从位图加载图像imageView.setImageBitmap(bitmap);
为了处理并发,我使用以下官方文档中描述的方法。
Processing Bitmaps Off the UI Thread
在高密度设备上,图像视图会闪烁。这个问题的任何可能的解决方案?
当我使用句柄并发时,只发生闪烁,当我只使用asynctask时,没有闪烁
答案 0 :(得分:1)
使用Picasso,Picasso可以为您节省下载,设置和缓存图像的所有问题。一个简单示例所需的整个代码是:
就像这样使用(来自UI线程):
在listview中,在getView()中使用它,它处理缓存和其他..
Picasso.with(context)
.load(url)
.into(imageView);
http://square.github.io/picasso/
或
ImageView tre = (ImageView) findViewById(R.id.imageview);
String URL = "http://www...sdsdsd ...";
mChart.setTag(URL);
new DownloadImage.execute(tre);
public class DownloadImage extends AsyncTask<ImageView, Void,Bitmap> {
ImageView imageView = null;
@Override
protected Bitmap doInBackground(ImageView... imageViews) {
this.imageView = imageViews[0];
return download_Image((String)imageView.getTag());
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
private Bitmap download_Image(String url) {
Bitmap bmp =null;
try{
URL ulrn = new URL(url);
HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
InputStream is = con.getInputStream();
bmp = BitmapFactory.decodeStream(is);
if (null != bmp)
return bmp;
}catch(Exception e){}
return bmp;
}