編輯:關於Android編程
這樣我們就能很好的理解要三級緩存了。首先,在內存讀數據。內存中讀數據需要用到最近最少引用算法(lrucache)。Lrucache算法要求為new LruCache
調用工具類的寫法:
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import com.example.huang.demo.utils.CacheUtils; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getBitmap(); } private void getBitmap() { iv = (ImageView) findViewById(R.id.iv); CacheUtils utils = new CacheUtils(); utils.diaplay(iv,"http://192.168.23.48:8080/test.jpg"); } }布局文件只要一個imageview就不單獨寫出來,直接來看緩存工具類:
import android.graphics.Bitmap; import android.util.Log; import android.widget.ImageView; /** * Created by huang on 2016/12/3. */ public class CacheUtils { private static final String TAG = "CacheUtils"; private MemoryCacheUtils mMemoryCacheUtils; private LocalCacheUtils mLocalCacheUtils; private NetCacheUtils mNetCacheUtils; public CacheUtils() { mMemoryCacheUtils = new MemoryCacheUtils(); mLocalCacheUtils = new LocalCacheUtils(); mNetCacheUtils = new NetCacheUtils(mMemoryCacheUtils, mLocalCacheUtils); } public void diaplay(ImageView imageView, String url) { //內存緩存 生命周期同調用者 Bitmap bitmap = mMemoryCacheUtils.getBitmapToMemory(url); if (bitmap != null) { imageView.setImageBitmap(bitmap); Log.i(TAG, "diaplay: 221111111111"); return; } //本地緩存 bitmap = LocalCacheUtils.getBitmapToLoacl(url); if (bitmap != null) { Log.i(TAG, "diaplay: 1111111"); imageView.setImageBitmap(bitmap); mMemoryCacheUtils.putBitmapToMemory(bitmap, url); return; } //網絡緩存 mNetCacheUtils.getBitmapFromNet(imageView, url); } }
內存緩存的工具類
import android.graphics.Bitmap; import android.util.Log; import android.util.LruCache; import static android.content.ContentValues.TAG; /** * Created by huang on 2016/12/3. */ public class MemoryCacheUtils { private LruCachemMemoryCache; public MemoryCacheUtils() { int maxmemory = (int) Runtime.getRuntime().maxMemory(); Log.i(TAG, "MemoryCacheUtils: " + maxmemory); mMemoryCache = new LruCache (maxmemory / 8) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } public void putBitmapToMemory(Bitmap bitmap, String url) { Log.i(TAG, "putBitmapToMemory: "); mMemoryCache.put(url, bitmap); } public Bitmap getBitmapToMemory(String url) { Log.i(TAG, "getBitmapToMemory: "); Bitmap bitmap = mMemoryCache.get(url); return bitmap; } }
最會別忘了添加權限:
網上文章雖多,但是這種效果少之又少,我真誠的獻上以供大家參考實現原理:自定義ImageView對此控件進行相應的layout(動態布局).這裡你要明白幾個方法執行的流程:
一、電腦上的設置首先,想要在手機上創建你的郵箱賬戶,就得先將此賬戶在電腦上進行一定的設置,就拿QQ郵箱來說(其他郵箱同例):第一步,在電腦上登陸你的QQ郵箱
第一步、效果展示圖1、藍色的進度條 圖2、紅色的進度條 圖3、多條顏色不同的進度條 圖4、多條顏色不同的進度條第二步、自定義ProgressBar實現帶數字的進度條0、項
Android基礎入門教程——2.4.7 構建一個可復用的自定義BaseAdapter標簽(空格分隔): Android基礎入門教程本節引言: 如