Skip to content

Commit b607e36

Browse files
committed
LruCache DiskLruCache example
使用LruCache DiskLruCache 实现图片缓存策略
1 parent 49ab25c commit b607e36

27 files changed

+3887
-10
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
package="org.ninetripods.mq.study">
44

55
<uses-permission android:name="android.permission.INTERNET" />
6+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
7+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
68

79
<application
810
android:allowBackup="true"
9-
android:icon="@mipmap/ic_launcher"
11+
android:icon="@mipmap/study"
1012
android:label="@string/app_name"
1113
android:supportsRtl="true"
1214
android:theme="@style/AppTheme">
@@ -87,6 +89,9 @@
8789
<activity
8890
android:name=".bezier.QQTrackPointActivity"
8991
android:screenOrientation="portrait" />
92+
<activity
93+
android:name=".recycle.WaterFallActivity"
94+
android:screenOrientation="portrait" />
9095
</application>
9196

9297
</manifest>

app/src/main/java/org/ninetripods/mq/study/BaseActivity.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.support.annotation.Nullable;
55
import android.support.v7.app.AppCompatActivity;
66
import android.support.v7.widget.Toolbar;
7+
import android.text.TextUtils;
78
import android.view.Menu;
89
import android.view.MenuItem;
910
import android.view.View;
@@ -16,6 +17,8 @@
1617
public class BaseActivity extends AppCompatActivity implements View.OnClickListener {
1718

1819
private boolean isShowRight;
20+
private int rightType;
21+
1922

2023
@Override
2124
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -39,28 +42,55 @@ public void initToolBar(Toolbar toolbar, String name, boolean showHomeAsUp) {
3942
}
4043

4144
public void initToolBar(Toolbar toolbar, String name, boolean showHomeAsUp, boolean isShowRight) {
45+
initToolBar(toolbar, name, showHomeAsUp, isShowRight, 0);
46+
}
47+
48+
public void initToolBar(Toolbar toolbar, String name, boolean showHomeAsUp, boolean isShowRight, int rightType) {
4249
this.isShowRight = isShowRight;
50+
this.rightType = rightType;
4351
toolbar.setTitle(name);
4452
setSupportActionBar(toolbar);
4553
getSupportActionBar().setDisplayHomeAsUpEnabled(showHomeAsUp);
4654
}
4755

4856
@Override
4957
public boolean onCreateOptionsMenu(Menu menu) {
58+
MenuItem menuItem;
5059
if (isShowRight) {
5160
getMenuInflater().inflate(R.menu.toolbar_right, menu);
61+
menuItem = menu.findItem(R.id.action_icon);
62+
switch (rightType) {
63+
case 1:
64+
//清除缓存
65+
menuItem.setTitle("清除缓存");
66+
break;
67+
}
5268
}
5369
return super.onCreateOptionsMenu(menu);
5470
}
5571

72+
@Override
73+
public boolean onPrepareOptionsMenu(Menu menu) {
74+
return super.onPrepareOptionsMenu(menu);
75+
}
76+
5677
@Override
5778
public boolean onOptionsItemSelected(MenuItem item) {
5879
switch (item.getItemId()) {
5980
case android.R.id.home:
6081
finish();
6182
return true;
6283
case R.id.action_icon:
63-
add();
84+
switch (rightType) {
85+
case 0:
86+
//通讯录添加Item动画
87+
add();
88+
break;
89+
case 1:
90+
//清除缓存
91+
clearCache();
92+
break;
93+
}
6494
return true;
6595
default:
6696
return super.onOptionsItemSelected(item);
@@ -75,6 +105,10 @@ public void onClick(View v) {
75105
public void add() {
76106
}
77107

108+
public void clearCache() {
109+
110+
}
111+
78112
/**
79113
* @param str 弹出的文字
80114
*/

app/src/main/java/org/ninetripods/mq/study/customViewGroup/flowLayout/FlowLayout.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.ninetripods.mq.study.customViewGroup.flowLayout;
22

33
import android.content.Context;
4+
import android.graphics.Canvas;
45
import android.util.AttributeSet;
56
import android.view.MotionEvent;
67
import android.view.View;
@@ -164,6 +165,19 @@ public LayoutParams generateLayoutParams(AttributeSet attrs) {
164165
return new MarginLayoutParams(getContext(), attrs);
165166
}
166167

168+
169+
@Override
170+
protected void onDraw(Canvas canvas) {
171+
MyLog.e("TTT","onDraw");
172+
super.onDraw(canvas);
173+
}
174+
175+
@Override
176+
protected void dispatchDraw(Canvas canvas) {
177+
MyLog.e("TTT","onDraw");
178+
super.dispatchDraw(canvas);
179+
}
180+
167181
@Override
168182
protected LayoutParams generateDefaultLayoutParams() {
169183
return super.generateDefaultLayoutParams();
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package org.ninetripods.mq.study.recycle;
2+
3+
import android.support.v7.widget.RecyclerView;
4+
import android.support.v7.widget.StaggeredGridLayoutManager;
5+
import android.support.v7.widget.Toolbar;
6+
import android.view.View;
7+
import android.widget.AbsListView;
8+
import android.widget.Toast;
9+
10+
import org.ninetripods.mq.study.BaseActivity;
11+
import org.ninetripods.mq.study.R;
12+
import org.ninetripods.mq.study.recycle.water_fall.ImgUtils.ImageCache;
13+
import org.ninetripods.mq.study.recycle.water_fall.ImgUtils.ImageFetcher;
14+
import org.ninetripods.mq.study.recycle.water_fall.ImgUtils.Utils;
15+
import org.ninetripods.mq.study.recycle.water_fall.MyDividerDecoration;
16+
import org.ninetripods.mq.study.util.DpUtil;
17+
import org.ninetripods.mq.study.util.adapter.WaterFallAdapter;
18+
19+
public class WaterFallActivity extends BaseActivity {
20+
21+
private RecyclerView recycler_view;
22+
private WaterFallAdapter mAdapter;
23+
private ImageFetcher mImageFetcher;
24+
25+
private static final String IMAGE_CACHE_DIR = "thumbs";//图片缓存目录
26+
27+
@Override
28+
public void setContentView() {
29+
setContentView(R.layout.activity_water_fall);
30+
}
31+
32+
@Override
33+
public void initViews() {
34+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
35+
initToolBar(toolbar, "图片瀑布流", true, true, 1);
36+
37+
ImageCache.ImageCacheParams cacheParams = new ImageCache.ImageCacheParams(this, IMAGE_CACHE_DIR);
38+
cacheParams.setMemCacheSizePercent(0.25f);// Set memory cache to 25% of app memory
39+
40+
// The ImageFetcher takes care of loading images into our ImageView children asynchronously
41+
mImageFetcher = new ImageFetcher(this, (int) DpUtil.dp2px(this, 100));
42+
mImageFetcher.setLoadingImage(R.mipmap.img_default_bg);
43+
mImageFetcher.addImageCache(cacheParams);
44+
45+
recycler_view = (RecyclerView) findViewById(R.id.recycler_view);
46+
recycler_view.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));
47+
recycler_view.addItemDecoration(new MyDividerDecoration());
48+
mAdapter = new WaterFallAdapter(this, mImageFetcher);
49+
recycler_view.setAdapter(mAdapter);
50+
}
51+
52+
@Override
53+
public void initEvents() {
54+
mAdapter.setOnItemClickListener(new WaterFallAdapter.OnItemClickListener() {
55+
@Override
56+
public void OnItemClick(int position, View view) {
57+
Toast.makeText(WaterFallActivity.this, "position is " + position, Toast.LENGTH_SHORT).show();
58+
}
59+
});
60+
// recycler_view.setOnScrollListener(new RecyclerView.OnScrollListener() {
61+
// @Override
62+
// public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
63+
// // Pause fetcher to ensure smoother scrolling when flinging
64+
// if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
65+
// // Before Honeycomb pause image loading on scroll to help with performance
66+
// if (!Utils.hasHoneycomb()) {
67+
// mImageFetcher.setPauseWork(true);
68+
// }
69+
// } else {
70+
// mImageFetcher.setPauseWork(false);
71+
// }
72+
// }
73+
//
74+
// @Override
75+
// public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
76+
// super.onScrolled(recyclerView, dx, dy);
77+
// }
78+
// });
79+
}
80+
81+
@Override
82+
public void onResume() {
83+
super.onResume();
84+
mImageFetcher.setExitTasksEarly(false);
85+
mAdapter.notifyDataSetChanged();
86+
}
87+
88+
@Override
89+
public void onPause() {
90+
super.onPause();
91+
mImageFetcher.setPauseWork(false);
92+
mImageFetcher.setExitTasksEarly(true);
93+
mImageFetcher.flushCache();
94+
}
95+
96+
@Override
97+
public void onDestroy() {
98+
super.onDestroy();
99+
mImageFetcher.closeCache();
100+
}
101+
102+
@Override
103+
public void clearCache() {
104+
mImageFetcher.clearCache();
105+
toast("缓存已清除");
106+
}
107+
}

0 commit comments

Comments
 (0)