java窗口加载图片闪,使用Thread加载图片出现图片闪动三次才加载对图片

package com.example.asynctask;

import java.io.BufferedInputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.HashMap;

import java.util.Map;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.os.Handler;

import android.os.Message;

import android.support.v4.util.LruCache;

import android.util.Log;

import android.widget.ImageView;

public class LoadImgUrl {

private ImageView itemImg;

private String imgUrl;

private LruCache mImgCache;

private Map threadMap = new HashMap();

private Handler mHandler = new Handler(){

public void handleMessage(Message msg) {

if(itemImg.getTag()!= null && itemImg.getTag().equals(imgUrl)){

ImageView threadImg = ((ItemBean)msg.obj).msgImg;

Bitmap bitMap = ((ItemBean)msg.obj).bitMap;

threadImg.setImageBitmap(bitMap);

}

};

};

public LoadImgUrl() {

// TODO Auto-generated constructor stub

int maxMemory = (int) Runtime.getRuntime().maxMemory() / 4;

mImgCache = new LruCache(maxMemory);

}

public void setImgUrl(ImageView img,final String url,int imgHolder) {

this.itemImg = img;

this.imgUrl = url;

if (img.getTag() == null || !img.getTag().equals(url)) {

img.setBackgroundResource(imgHolder);

img.setTag(url);

}

Bitmap imgBitmap = getBitMapByLruc(url);

if (imgBitmap == null) {

//            setBitmapByAsyncTask(url, img);

Thread imgThread = threadMap.get(url);

if (imgThread == null) {

setBitmapByNewThread(url,img);

}

}else {

img.setImageBitmap(imgBitmap);

}

}

private void setBitmapByNewThread(final String url,final ImageView threadImg) {

Thread newThread = new Thread(){

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

BufferedInputStream is = null;

try {

is = new BufferedInputStream(new URL(url).openStream());

Thread.sleep(3000);

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Bitmap bitMap = BitmapFactory.decodeStream(is);

putBitmapToLruc(bitMap, url);

Message msg = Message.obtain();

ItemBean itemBean = new ItemBean(threadImg, bitMap);

msg.obj = itemBean;

mHandler.sendMessage(msg);

}

};

newThread.start();

threadMap.put(url, newThread);

}

private void setBitmapByAsyncTask(String url,ImageView imgView) {

new MyImgAsyncTask(url, imgView).execute();

}

private Bitmap getBitMapByLruc(String url) {

return mImgCache.get(url);

}

private void putBitmapToLruc(Bitmap bitMap,String url) {

mImgCache.put(url, bitMap);

}

class MyImgAsyncTask extends AsyncTask{

ImageView asItemImg;

String imgUrl;

public MyImgAsyncTask(String url,ImageView imgView) {

// TODO Auto-generated constructor stub

asItemImg = imgView;

imgUrl = url;

}

@Override

protected Bitmap doInBackground(String... params) {

// TODO Auto-generated method stub

Bitmap bitMap = null;

try {

BufferedInputStream bfIs = new BufferedInputStream(new URL(imgUrl).openStream());

bitMap = BitmapFactory.decodeStream(bfIs);

putBitmapToLruc(bitMap, imgUrl);

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return bitMap;

}

@Override

protected void onPostExecute(Bitmap result) {

// TODO Auto-generated method stub

super.onPostExecute(result);

asItemImg.setImageBitmap(result);

}

}

class ItemBean{

ImageView msgImg;

Bitmap bitMap;

public ItemBean(ImageView img,Bitmap bitmap) {

// TODO Auto-generated constructor stub

msgImg = img;

this.bitMap = bitmap;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值