首先定义一个类
LruUtils单位类
public class LruUtils {
private LruCache<String, Bitmap>lruCache;
private long max=Runtime.getRuntime().maxMemory();//手机最大内存
public LruUtils(){
lruCache=new LruCache<String,Bitmap>((int) (max/8)){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
};
}
//自定义读取图片
public Bitmap readBitmap(String key){
return lruCache.get(key);
}
/自定义保存图片
public void saveBitmap(String key,Bitmap bitmap){
lruCache.put(key,bitmap);
}
}
SdUtils单位类
public class SdUtils {
// 自定义保存图片
public static void saveBitmap(String name, Bitmap bitmap){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File saveF = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(saveF, name);
try{
bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file));
}catch (Exception e){
}
}
}
// 自定义保存图片
public static Bitmap readBitMap(String name){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File readFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(readFile, name);
return BitmapFactory.decodeFile(file.getAbsolutePath());
}
return null;
}
}
NetUtils单位类
public class NetUtils {
public static Bitmap getBitmap(String url) throws ExecutionException, InterruptedException {
return new MyTask().execute(url).get();
}
static class MyTask extends AsyncTask<String,String,Bitmap> {
@Override
protected Bitmap doInBackground(String… strings) {
String imageURl=strings[0];
HttpURLConnection httpCon=null;
try {
URL url = new URL(imageURl);
httpCon=(HttpURLConnection)url.openConnection();
httpCon.setReadTimeout(5000); // 设置读取超时时间
httpCon.setConnectTimeout(5000); // 设置连接超时时间
httpCon.setRequestMethod(“GET”); // 设置请求方式
if(httpCon.getResponseCode()==200){
InputStream is = httpCon.getInputStream();
//里面存放inputStream
Bitmap bitmap = BitmapFactory.decodeStream(is);
//返回一个bitmap
return bitmap;
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(httpCon!=null){
httpCon.disconnect();
}
}
return null;
}
}
}
主类
主类
public class gong extends AppCompatActivity {
String url="http://www.qubaobei.com/ios/cf/uploadfile/132/59/58317.jpg";
private ImageView imageView;
private LruUtils lruUtils=new LruUtils();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gong);
imageView=findViewById(R.id.image);
try {
custom();
}catch (Exception e){
}
}
private void custom() throws ExecutionException, InterruptedException, FileNotFoundException {
Bitmap bitmap = lruUtils.readBitmap("你好");
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(this, "图片来自内存", Toast.LENGTH_SHORT).show();
}else{
bitmap = SdUtils.readBitmap("你好.jpg");
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(this, "图片从sd来的", Toast.LENGTH_SHORT).show();
lruUtils.saveBitmap("你好",bitmap);
}else{
bitmap= NetUtils.getBitmap(url);
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(this, "图片从网络获取", Toast.LENGTH_SHORT).show();
SdUtils.saveBitmap("你好.jpg",bitmap);
lruUtils.saveBitmap("你好",bitmap);
}else{
Toast.makeText(this, "请连接网络", Toast.LENGTH_SHORT).show();
}
}
}
}
}