編輯:關於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 LruCache mMemoryCache;
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;
}
}
最會別忘了添加權限:
Android實現手勢滑動多點觸摸放大縮小圖片效果
網上文章雖多,但是這種效果少之又少,我真誠的獻上以供大家參考實現原理:自定義ImageView對此控件進行相應的layout(動態布局).這裡你要明白幾個方法執行的流程:
安卓手機郵箱設置教程 教您如何使用手機接收郵件
一、電腦上的設置首先,想要在手機上創建你的郵箱賬戶,就得先將此賬戶在電腦上進行一定的設置,就拿QQ郵箱來說(其他郵箱同例):第一步,在電腦上登陸你的QQ郵箱
Android自定義View實現帶數字的進度條實例代碼
第一步、效果展示圖1、藍色的進度條 圖2、紅色的進度條 圖3、多條顏色不同的進度條 圖4、多條顏色不同的進度條第二步、自定義ProgressBar實現帶數字的進度條0、項
Android基礎入門教程——2.4.7 構建一個可復用的自定義BaseAdapter
Android基礎入門教程——2.4.7 構建一個可復用的自定義BaseAdapter標簽(空格分隔): Android基礎入門教程本節引言: 如