三次缓存,imgloder配置,二次采样
2017-08-16 19:24
183 查看
package com.kson.viewpagerautobanner.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.INotificationSideChannel;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
/**
* Author:kson
* E-mail:19655910@qq.com
* Time:2017/08/16
* Description:封装bitmap三级缓存工具类
*/
public class NetworkUtils {
//文件夹目录
private final String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/kson/";
private String url;
private ImageView iv;
//弱引用集合,弱引用(jvm垃圾回收的时候,只有内存不足时才回收)
private HashMap<String,SoftReference<Bitmap>> hashMap = new HashMap<>();
public NetworkUtils(String url, ImageView iv) {
this.url = url;
this.iv = iv;
}
/**
* 网络请求
*/
public void execute(){
new BitmapTask().execute(url);
}
/**
* 网络请求异步任务类
*/
class BitmapTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (200 == connection.getResponseCode()) {
InputStream inputStream = connection.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream);
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
iv.setImageBitmap(bitmap);
memory(url,bitmap);
diskMemory(url,bitmap);
}
}
/**
* 把bitmap存到sdcard中,本地存储
*
* @param url
* @param bitmap
*/
public void diskMemory(String url, Bitmap bitmap) {
try {
File dir = new File(SDCARD_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
OutputStream outputStream = new FileOutputStream(file);
//把bitmap'写入到sdcard
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取磁盘的bitmap
* @param url
* @return
*/
public Bitmap getDiskMemory(String url) {
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(ur
9aea
l));
if (file != null && file.exists()) {
try {
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 内存缓存
* @param url
* @param bitmap
*/
public void memory(String url,Bitmap bitmap){
//得到软引用对象
SoftReference<Bitmap> bmp = new SoftReference<Bitmap>(bitmap);
//存储软引用对象
hashMap.put(new Md5FileNameGenerator().generate(url),bmp);
}
/**
* 从内存缓存取出bitmap
* @param url
* @return
*/
public Bitmap getMemory(String url){
Bitmap bitmap = null;
//得到软引用对象
SoftReference<Bitmap> bmpReference = hashMap.get(new Md5FileNameGenerator().generate(url));
if (bmpReference!=null){
bitmap = bmpReference.get();
}
return bitmap;
}
}
二次采样
实现步骤:
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法(或者decodeStream())
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = “你的缩放倍数”;//必须为2的幂
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds =false;
imgloder
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.INotificationSideChannel;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
/**
* Author:kson
* E-mail:19655910@qq.com
* Time:2017/08/16
* Description:封装bitmap三级缓存工具类
*/
public class NetworkUtils {
//文件夹目录
private final String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/kson/";
private String url;
private ImageView iv;
//弱引用集合,弱引用(jvm垃圾回收的时候,只有内存不足时才回收)
private HashMap<String,SoftReference<Bitmap>> hashMap = new HashMap<>();
public NetworkUtils(String url, ImageView iv) {
this.url = url;
this.iv = iv;
}
/**
* 网络请求
*/
public void execute(){
new BitmapTask().execute(url);
}
/**
* 网络请求异步任务类
*/
class BitmapTask extends AsyncTask<String, Void, Bitmap> {
@Override
protected Bitmap doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (200 == connection.getResponseCode()) {
InputStream inputStream = connection.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream);
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
iv.setImageBitmap(bitmap);
memory(url,bitmap);
diskMemory(url,bitmap);
}
}
/**
* 把bitmap存到sdcard中,本地存储
*
* @param url
* @param bitmap
*/
public void diskMemory(String url, Bitmap bitmap) {
try {
File dir = new File(SDCARD_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(url));
OutputStream outputStream = new FileOutputStream(file);
//把bitmap'写入到sdcard
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取磁盘的bitmap
* @param url
* @return
*/
public Bitmap getDiskMemory(String url) {
File file = new File(SDCARD_PATH + new Md5FileNameGenerator().generate(ur
9aea
l));
if (file != null && file.exists()) {
try {
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 内存缓存
* @param url
* @param bitmap
*/
public void memory(String url,Bitmap bitmap){
//得到软引用对象
SoftReference<Bitmap> bmp = new SoftReference<Bitmap>(bitmap);
//存储软引用对象
hashMap.put(new Md5FileNameGenerator().generate(url),bmp);
}
/**
* 从内存缓存取出bitmap
* @param url
* @return
*/
public Bitmap getMemory(String url){
Bitmap bitmap = null;
//得到软引用对象
SoftReference<Bitmap> bmpReference = hashMap.get(new Md5FileNameGenerator().generate(url));
if (bmpReference!=null){
bitmap = bmpReference.get();
}
return bitmap;
}
}
二次采样
实现步骤:
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法(或者decodeStream())
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = “你的缩放倍数”;//必须为2的幂
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds =false;
imgloder
相关文章推荐
- Bitmap二次采样,Android中的缓存处理及异步加载图片类的封装
- 三级缓存,二次采样
- ImageView(图片缓存内存中+图片二次采样)
- Days 25 LruCache缓存处理&Bitmap二次采样
- 图片二次采样
- codeigniter读取数据库的公共配置并全局缓存的实现方案
- Openfire开发配置,Openfire源码配置,OpenFire二次开发配置
- Varnish缓存代理简介与配置
- Websphere6 部署配置文件缓存清除
- 利用Spring的AOP来配置和管理你的二级缓存(EHCache)
- recyclerview瀑布流_图片二次采样
- IIS7禁用单个静态文件的缓存配置方法
- codeigniter读取数据库的公共配置并全局缓存的实现方案
- Revit 二次开发的环境配置<上手版>
- Android开发之Bitmap二次采样
- HTML5应用缓存配置
- Mac PHPStorm清除SVN配置缓存
- Android28_Bitmap二次采样
- hibernate配置二级缓存基本步骤
- Ehcache 1.5.0 User Guide - Cache Configuration 缓存配置(3)