Android imageview闪烁

时间:2015-04-08 04:43:19

标签: android concurrency bitmap imageview flicker

在我的应用程序中,我有列表视图,列表中的每个项目都包含一个图像视图。使用

从位图加载图像
imageView.setImageBitmap(bitmap);

为了处理并发,我使用以下官方文档中描述的方法。

Processing Bitmaps Off the UI Thread

在高密度设备上,图像视图会闪烁。这个问题的任何可能的解决方案?

当我使用句柄并发时,只发生闪烁,当我只使用asynctask时,没有闪烁

1 个答案:

答案 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;
  }