92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

Bitmap三級緩存 和二次采樣

2019-7-22    seo達人

如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

一.為什么Bitmap三級緩存?
沒有緩存的弊端 :費流量, 加載速度慢
加入緩存的優點: 省流量,支持離線瀏覽
二.原理

從內存獲取圖片, 如果存在, 則顯示; 如果不存在, 則從SD卡中獲取圖片
從SD卡中獲取圖片, 如果文件中存在, 顯示, 并且添加到內存中; 否則開啟網絡下載圖片
從網絡下載圖片, 如果下載成功, 則添加到緩存中, 存入SD卡, 顯示圖片
三.代碼
(1)添加讀寫SD卡的權限和網絡權限



// //Lrucache存儲工具類
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 getBitmap(String key){
    return lruCache.get(key);
}
public void setBitmap(String key,Bitmap bitmap){
    lruCache.put(key,bitmap);
}
1
2
3
4
5
6
7
8
9
10
11
12
}
//SD卡工具類
public class SDUtils {

public static void setBitmap(String name, Bitmap bitmap) {

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File file1 = new File(file, name);

        try {

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(file1));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
public static Bitmap getBitmap(String name){

    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        File file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File file1=new File(file,name);

        return BitmapFactory.decodeFile(file1.getAbsolutePath());

    }
    return null;
}

}
//網絡

import android.app.AlertDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class NewUtils {
public static Bitmap getBitmap(String url) throws ExecutionException, InterruptedException {
return new MyTask().execute(url).get();
}
static class MyTask extends AsyncTask<String,Void,Bitmap>{
@Override
protected Bitmap doInBackground(String… strings) {
String imageUrl = strings[0];
HttpURLConnection conn = null;
try {
URL url = new URL(imageUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
conn.setRequestMethod(“GET”);
if (conn.getResponseCode() == 200) {
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return null;
}
}

}
//使用三個工具類完成Bitmap的三級緩存
package com.example.administrator.myapplication;

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {
private ImageView imageView;
Button button;
private LruUtils lruUtils= new LruUtils();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);
imageView=findViewById(R.id.imageview);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap=lruUtils.getBitmap(“czn”);
if (bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(MainActivity.this, “圖片存內存”, Toast.LENGTH_SHORT).show();
}else{
bitmap=SDUtils.getBitmap(“czn.jpg”);
if (bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(MainActivity.this, “圖片存SD卡”, Toast.LENGTH_SHORT).show();
lruUtils.setBitmap(“czn”,bitmap);
}else{
try {
bitmap=NewUtils.getBitmap(“http://pic1.win4000.com/wallpaper/e/50d80458e1373.jpg”);
if (bitmap!=null){
imageView.setImageBitmap(bitmap);
Toast.makeText(MainActivity.this, “圖片存網絡”, Toast.LENGTH_SHORT).show();
SDUtils.setBitmap(“czn.jpg”,bitmap);
lruUtils.setBitmap(“czn”,bitmap);
}else{
Toast.makeText(MainActivity.this, “沒有找到”, Toast.LENGTH_SHORT).show();
}

                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        }
    });
}

}
Bitmap二次采樣


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class Main2Activity extends AppCompatActivity {
Button bt;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
bt=findViewById(R.id.bt);
imageView=findViewById(R.id.mimage);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Bitmap bitmap = new MyTask().execute(“https://cdn.duitang.com/uploads/item/201211/24/20121124230042_Bfhim.jpeg”).get();
imageView.setImageBitmap(bitmap);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

        }

    });
}
class MyTask extends AsyncTask<String,Object,Bitmap>{

    @Override
    protected Bitmap doInBackground(String... strings) {
        try {
            URL url = new URL(strings[0]);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            if(urlConnection.getResponseCode()==200){
                InputStream inputStream = urlConnection.getInputStream();
                //將inputStream流存儲起來
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] bytes = new byte[1024];
                int len=0;
                while((len=inputStream.read(bytes))!=-1){
                    byteArrayOutputStream.write(bytes,0,len);
                }
                //桶:網絡的圖片都放在數組里面了
                byte[] data = byteArrayOutputStream.toByteArray();
                //TODO 1:第一次采樣:只采邊框 計算壓縮比例
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds=true;//設置只采邊框
                BitmapFactory.decodeByteArray(data,0,data.length,options);//采樣
                int outWidth = options.outWidth;//獲得原圖的寬
                int outHeight = options.outHeight;//獲得原圖的高
                //計算縮放比例
                int size=1;
                while(outWidth/size>100||outHeight/size>100){
                    size*=2;
                }
                //TODO 2:第二次采樣:按照比例才像素
                options.inJustDecodeBounds=false;//設置只采邊框為fasle
                options.inSampleSize=size;//設置縮放比例
                Bitmap bitmap= BitmapFactory.decodeByteArray(data,0,data.length,options);//采樣
                return  bitmap;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
藍藍設計www.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 、平面設計服務。

日歷

鏈接

個人資料

藍藍設計的小編 http://www.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
国产mv免费观看入口亚洲| 亚洲国产精品大全| 欧美国产中文字幕| 亚洲美女av在线播放| 国产91久久婷婷一区二区| 国产精品视频公开费视频| 久热精品在线视频| 久久天天躁狠狠躁夜夜av| 91福利视频在线观看| 日韩在线视频网| 亚洲女人天堂成人av在线| 国产精品久久99久久| 亚洲精品aⅴ中文字幕乱码| 欧美亚洲一区在线| 亚洲欧美日韩国产成人| 国产亚洲xxx| 亚洲最大的网站| 夜夜嗨av一区二区三区免费区| 国产精品夜色7777狼人| 国产欧美一区二区三区四区| 久久精品成人动漫| 欧美夫妻性视频| 久久精品2019中文字幕| 亚洲乱亚洲乱妇无码| 美女视频黄免费的亚洲男人天堂| 久久99亚洲热视| 97色在线观看免费视频| 97免费视频在线播放| 亚洲成人性视频| 亚洲精品欧美一区二区三区| 高清在线视频日韩欧美| 亚洲成人久久电影| 91精品国产综合久久香蕉922| 茄子视频成人在线| 91高清视频在线免费观看| 国产一区二区三区在线观看网站| 国产午夜精品一区理论片飘花| 久久精品国产69国产精品亚洲| 136fldh精品导航福利| 久久精品电影一区二区| 国产欧美最新羞羞视频在线观看| 久久精品久久久久电影| 亚洲精品综合精品自拍| 91日本在线视频| 一区二区亚洲欧洲国产日韩| 国产精品成人免费电影| 欧美亚洲国产视频小说| 欧美最顶级的aⅴ艳星| 91色p视频在线| 欧美激情网友自拍| 亚洲国产精品久久精品怡红院| 国产精品美腿一区在线看| 久久亚洲春色中文字幕| 日本道色综合久久影院| 最新亚洲国产精品| 国产专区欧美专区| 欧美猛男性生活免费| 性欧美xxxx视频在线观看| 日韩最新免费不卡| 日本一区二区在线免费播放| 国产激情久久久| 黑人巨大精品欧美一区二区| 亚洲最大成人免费视频| 伊人久久男人天堂| 国产婷婷成人久久av免费高清| 亚洲精品永久免费| 国产精品美女在线观看| 在线日韩精品视频| 日韩欧美999| 日韩av在线不卡| 午夜精品福利视频| 国内外成人免费激情在线视频网站| 在线看国产精品| 国产亚洲欧洲高清| 日韩国产中文字幕| 国产美女精品免费电影| 亚洲激情 国产| 精品无人区太爽高潮在线播放| 尤物yw午夜国产精品视频| 性欧美xxxx视频在线观看| 国产精品91免费在线| 奇门遁甲1982国语版免费观看高清| 欧美xxxx18国产| 91国内在线视频| 精品视频在线播放色网色视频| 日韩视频免费在线观看| www.亚洲男人天堂| 这里只有精品丝袜| 日韩欧美中文字幕在线观看| 日韩在线免费高清视频| 亚洲综合自拍一区| 伊人伊成久久人综合网站| 国产精品极品美女粉嫩高清在线| 欧美黑人一级爽快片淫片高清| 亚洲电影天堂av| 亚洲男人7777| 亚洲在线免费视频| 亚洲偷欧美偷国内偷| 欧美成人免费播放| 亚洲一区中文字幕| 国产精品美乳在线观看| 国产欧美日韩精品在线观看| 亚洲热线99精品视频| 国产日韩中文字幕| 国产成人精品电影久久久| 国产不卡在线观看| 欧美一区二粉嫩精品国产一线天| 97视频在线观看播放| 色老头一区二区三区在线观看| 成人妇女免费播放久久久| 美女久久久久久久| 久久中文字幕视频| 欧洲成人在线观看| 一区二区三区 在线观看视| 欧美激情精品久久久久久大尺度| 国产精品视频午夜| 91av国产在线| 亚洲午夜久久久影院| 伊是香蕉大人久久| 中文字幕日韩精品有码视频| 欧美性生交xxxxx久久久| 亚洲日本中文字幕免费在线不卡| 激情成人中文字幕| 91影视免费在线观看| 91精品啪在线观看麻豆免费| 91香蕉嫩草神马影院在线观看| 日韩免费高清在线观看| 久久精品99久久久香蕉| 精品美女久久久久久免费| 在线日韩中文字幕| 亚洲黄色在线看| 亚洲自拍偷拍福利| 91视频国产精品| 欧美精品久久一区二区| www.欧美精品| 欧美黑人巨大精品一区二区| 日本精品一区二区三区在线播放视频| 国产成人极品视频| 亚洲成人网在线观看| 亚洲精品久久久久久久久| 欧美日韩美女在线| 国产精品99蜜臀久久不卡二区| 精品久久久久久久久久久久| 国产精品免费久久久久影院| 欧美激情亚洲视频| 尤物九九久久国产精品的特点| 国产69精品久久久久9| 日本伊人精品一区二区三区介绍| 精品亚洲一区二区| 欧美在线播放视频| 91av中文字幕| 国产精品午夜视频| 久久久久亚洲精品国产| 久久久在线免费观看| 日韩成人高清在线| 中文在线资源观看视频网站免费不卡| 亚洲国产成人一区| 亚洲视频欧洲视频| 欧美激情一区二区三区成人| 国产成人在线一区二区| 欧美日韩亚洲精品一区二区三区| 亚洲大胆人体在线| 国产精品手机播放| 亚洲精品福利免费在线观看|