diff --git a/app/src/main/java/com/bonait/bnframework/MainApplication.java b/app/src/main/java/com/bonait/bnframework/MainApplication.java index b78c4609..71cd2d54 100644 --- a/app/src/main/java/com/bonait/bnframework/MainApplication.java +++ b/app/src/main/java/com/bonait/bnframework/MainApplication.java @@ -78,8 +78,8 @@ public class MainApplication extends Application { //2.初始化SD卡,数据库DB SdCart.getInstance().initSD(); - //4.初始化Main - ConfigData.getInstance(); + //4.初始化Main,并且增加本地图片库 + ConfigData.getInstance().AddImage(context); // activity生命周期管理 ActivityLifecycleManager.get().init(this); diff --git a/app/src/main/java/com/bonait/bnframework/business/ConfigData.java b/app/src/main/java/com/bonait/bnframework/business/ConfigData.java index f783867d..212854c6 100644 --- a/app/src/main/java/com/bonait/bnframework/business/ConfigData.java +++ b/app/src/main/java/com/bonait/bnframework/business/ConfigData.java @@ -1,7 +1,11 @@ package com.bonait.bnframework.business; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.util.Log; +import com.bonait.bnframework.R; import com.bonait.bnframework.common.constant.ConfigName; import com.bonait.bnframework.common.constant.MessageName; import com.bonait.bnframework.common.db.QueryDB; @@ -11,6 +15,7 @@ import com.bonait.bnframework.common.helper.HttpUtils; import com.bonait.bnframework.common.helper.Json; import com.bonait.bnframework.common.helper.mode.OrderStatusChange; import com.bonait.bnframework.common.helper.mode.VersionMode; +import com.bonait.bnframework.common.image.utils.LocalCacheUtils; import java.util.ArrayList; @@ -191,6 +196,25 @@ public class ConfigData { ConfigUtil.write(ConfigName.getInstance().dishesCon,"Version", ConfigName.getInstance().Version); } + /** + * 增加本地图片 + */ + public void AddImage(Context context) + { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize=2;//宽高压缩为原来的1/2 + options.inPreferredConfig=Bitmap.Config.ARGB_4444; + Bitmap bitmap1= BitmapFactory.decodeResource(context.getResources(), R.mipmap.image1,options); + Bitmap bitmap2= BitmapFactory.decodeResource(context.getResources(), R.mipmap.image2,options); + Bitmap bitmap3= BitmapFactory.decodeResource(context.getResources(), R.mipmap.image3,options); + Bitmap bitmap4= BitmapFactory.decodeResource(context.getResources(), R.mipmap.image4,options); + LocalCacheUtils localCacheUtils=new LocalCacheUtils(); + localCacheUtils.setBitmapToLocal("image1.png",bitmap1); + localCacheUtils.setBitmapToLocal("image2.png",bitmap2); + localCacheUtils.setBitmapToLocal("image3.png",bitmap3); + localCacheUtils.setBitmapToLocal("image4.png",bitmap4); + } + /** * 获取订单信息 */ diff --git a/app/src/main/java/com/bonait/bnframework/common/image/MyBitmapUtils.java b/app/src/main/java/com/bonait/bnframework/common/image/MyBitmapUtils.java new file mode 100644 index 00000000..188b9195 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/common/image/MyBitmapUtils.java @@ -0,0 +1,48 @@ +package com.bonait.bnframework.common.image; + +import android.graphics.Bitmap; +import android.widget.ImageView; + +import com.bonait.bnframework.R; +import com.bonait.bnframework.common.image.utils.LocalCacheUtils; +import com.bonait.bnframework.common.image.utils.MemoryCacheUtils; +import com.bonait.bnframework.common.image.utils.NetCacheUtils; + +/** + * 自定义的BitmapUtils,实现三级缓存 + */ +public class MyBitmapUtils { + private NetCacheUtils mNetCacheUtils; + private LocalCacheUtils mLocalCacheUtils; + private MemoryCacheUtils mMemoryCacheUtils; + + public MyBitmapUtils(){ + mMemoryCacheUtils=new MemoryCacheUtils(); + mLocalCacheUtils=new LocalCacheUtils(); + mNetCacheUtils=new NetCacheUtils(mLocalCacheUtils,mMemoryCacheUtils); + } + + public void disPlay(ImageView ivPic, String url) { + ivPic.setImageResource(R.mipmap.loading2); + Bitmap bitmap; + //内存缓存 + bitmap=mMemoryCacheUtils.getBitmapFromMemory(url); + if (bitmap!=null){ + ivPic.setImageBitmap(bitmap); + System.out.println("从内存获取图片啦....."); + return; + } + + //本地缓存 + bitmap = mLocalCacheUtils.getBitmapFromLocal(url); + if(bitmap !=null){ + ivPic.setImageBitmap(bitmap); + System.out.println("从本地获取图片啦....."); + //从本地获取图片后,保存至内存中 + mMemoryCacheUtils.setBitmapToMemory(url,bitmap); + return; + } + //网络缓存 + mNetCacheUtils.getBitmapFromNet(ivPic,url); + } +} diff --git a/app/src/main/java/com/bonait/bnframework/common/image/utils/LocalCacheUtils.java b/app/src/main/java/com/bonait/bnframework/common/image/utils/LocalCacheUtils.java new file mode 100644 index 00000000..87caefd7 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/common/image/utils/LocalCacheUtils.java @@ -0,0 +1,66 @@ +package com.bonait.bnframework.common.image.utils; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Environment; + +import com.bonait.bnframework.common.constant.ConfigName; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; + +/** + * 三级缓存之本地缓存 + */ +public class LocalCacheUtils { + + private static final String CACHE_PATH= Environment.getExternalStorageDirectory().getAbsolutePath()+"/hblxiaochaodb/WebImage"; + + /** + * 从本地读取图片 + * @param url + */ + public Bitmap getBitmapFromLocal(String url){ + String fileName = null;//把图片的url当做文件名,并进行MD5加密 + try { + fileName = MD5Encoder.encode(url); + File file=new File(CACHE_PATH,fileName); + + Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file)); + + return bitmap; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 从网络获取图片后,保存至本地缓存 + * @param url + * @param bitmap + */ + public void setBitmapToLocal(String url,Bitmap bitmap){ + try { + String fileName = MD5Encoder.encode(url);//把图片的url当做文件名,并进行MD5加密 + File file=new File(CACHE_PATH,fileName); + + //通过得到文件的父文件,判断父文件是否存在 + File parentFile = file.getParentFile(); + if (!parentFile.exists()){ + parentFile.mkdirs(); + } + + if(!file.exists())//文件不存在 + { + //把图片保存至本地 + bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file)); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bonait/bnframework/common/image/utils/MD5Encoder.java b/app/src/main/java/com/bonait/bnframework/common/image/utils/MD5Encoder.java new file mode 100644 index 00000000..b4bb2897 --- /dev/null +++ b/app/src/main/java/com/bonait/bnframework/common/image/utils/MD5Encoder.java @@ -0,0 +1,25 @@ +package com.bonait.bnframework.common.image.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5Encoder { + public static String encode(String pwd) { + try { + MessageDigest digest = MessageDigest.getInstance("MD5"); + byte[] bytes = digest.digest(pwd.getBytes()); + StringBuffer sb = new StringBuffer(); + for(int i = 0;i mMemoryCache; + + public MemoryCacheUtils(){ + long maxMemory = Runtime.getRuntime().maxMemory()/8;//得到手机最大允许内存的1/8,即超过指定内存,则开始回收 + //需要传入允许的内存最大值,虚拟机默认内存16M,真机不一定相同 + mMemoryCache=new LruCache ((int) maxMemory){ + //用于计算每个条目的大小 + @Override + protected int sizeOf(String key, Bitmap value) { + int byteCount = value.getByteCount(); + return byteCount; + } + }; + } + + /** + * 从内存中读图片 + * @param url + */ + public Bitmap getBitmapFromMemory(String url) { + //Bitmap bitmap = mMemoryCache.get(url);//1.强引用方法 + /*2.弱引用方法 + SoftReference { + + private ImageView ivPic; + private String url; + + /** + * 后台耗时操作,存在于子线程中 + * @param params + * @return + */ + @Override + protected Bitmap doInBackground(Object[] params) { + ivPic = (ImageView) params[0]; + url = (String) params[1]; + + return downLoadBitmap(url); + } + + /** + * 更新进度,在主线程中 + * @param values + */ + @Override + protected void onProgressUpdate(Void[] values) { + super.onProgressUpdate(values); + } + + /** + * 耗时方法结束后执行该方法,主线程中 + * @param result + */ + @Override + protected void onPostExecute(Bitmap result) { + if (result != null) { + ivPic.setImageBitmap(result); + System.out.println("从网络缓存图片啦....."); + + //从网络获取图片后,保存至本地缓存 + mLocalCacheUtils.setBitmapToLocal(url, result); + //保存至内存中 + mMemoryCacheUtils.setBitmapToMemory(url, result); + + } + } + } + + /** + * 网络下载图片 + * @param url + * @return + */ + private Bitmap downLoadBitmap(String url) { + HttpURLConnection conn = null; + try { + conn = (HttpURLConnection) new URL(url).openConnection(); + conn.setConnectTimeout(10000);//超时时间为10秒 + conn.setReadTimeout(5000); + conn.setRequestMethod("GET");//使用GET方法访问网络 + + int responseCode = conn.getResponseCode(); + if (responseCode == 200) { + //图片压缩 + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize=2;//宽高压缩为原来的1/2 + options.inPreferredConfig=Bitmap.Config.ARGB_4444; + Bitmap bitmap = BitmapFactory.decodeStream(conn.getInputStream(),null,options); + return bitmap; + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + conn.disconnect(); + } + + return null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyActivity.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyActivity.java index 56ca4027..7fdf708f 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyActivity.java @@ -243,14 +243,11 @@ public class DiyActivity extends BaseActivity implements MyClickListener { * @param arrayList */ private void Drawable_Get(List arrayList) { - //从drawable文件夹下获取到事先准备的图片,在这里演示三张图片 - Drawable drawable = getResources().getDrawable(R.mipmap.hgr); - Drawable drawable1 = getResources().getDrawable(R.mipmap.hgr); - Drawable drawable2 = getResources().getDrawable(R.mipmap.hgr); //把他们存放到一个list集合中 - arrayList.add(drawable); - arrayList.add(drawable1); - arrayList.add(drawable2); + arrayList.add(getResources().getDrawable(R.mipmap.image1)); + arrayList.add(getResources().getDrawable(R.mipmap.image2)); + arrayList.add(getResources().getDrawable(R.mipmap.image3)); + arrayList.add(getResources().getDrawable(R.mipmap.image4)); //调用轮播图设置方法 Banner_Set(Banner_list); } diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyUpdateActivity.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyUpdateActivity.java index da685985..5b67395a 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyUpdateActivity.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/from/DiyUpdateActivity.java @@ -271,14 +271,10 @@ public class DiyUpdateActivity extends BaseActivity { * @param arrayList */ private void Drawable_Get(List arrayList) { - //从drawable文件夹下获取到事先准备的图片,在这里演示三张图片 - Drawable drawable = getResources().getDrawable(R.mipmap.hgr); - Drawable drawable1 = getResources().getDrawable(R.mipmap.hgr); - Drawable drawable2 = getResources().getDrawable(R.mipmap.hgr); - //把他们存放到一个list集合中 - arrayList.add(drawable); - arrayList.add(drawable1); - arrayList.add(drawable2); + arrayList.add(getResources().getDrawable(R.mipmap.image1)); + arrayList.add(getResources().getDrawable(R.mipmap.image2)); + arrayList.add(getResources().getDrawable(R.mipmap.image3)); + arrayList.add(getResources().getDrawable(R.mipmap.image4)); //调用轮播图设置方法 Banner_Set(Banner_list); } diff --git a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/QDListSectionAdapter.java b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/QDListSectionAdapter.java index efc60ea3..78894855 100644 --- a/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/QDListSectionAdapter.java +++ b/app/src/main/java/com/bonait/bnframework/modules/home/fragment/mode/QDListSectionAdapter.java @@ -13,6 +13,7 @@ import android.widget.TextView; import com.bonait.bnframework.R; import com.bonait.bnframework.common.constant.MessageName; import com.bonait.bnframework.common.helper.I.MyClickListener; +import com.bonait.bnframework.common.image.MyBitmapUtils; import com.bonait.bnframework.common.message.MessageManager; import com.bonait.bnframework.common.utils.AlertDialogUtils; import com.bonait.bnframework.common.utils.ToastUtils; @@ -24,12 +25,14 @@ import com.qmuiteam.qmui.widget.section.QMUISection; public class QDListSectionAdapter extends QMUIDefaultStickySectionAdapter { private TextView tvTag ,tvNote,tvAccount,Sc_text,delete_text; - private RelativeLayout ImageUrl;//图片 + private ImageView ImageUrl;//图片 private ImageView sc_image;//是否收藏 public boolean IsSC=false; + //图标 + private MyBitmapUtils myBitmapUtils=new MyBitmapUtils(); /** * 点击事件 */ @@ -75,7 +78,8 @@ public class QDListSectionAdapter extends QMUIDefaultStickySectionAdapter { tvTag.setText(name); tvNote.setText("时间:"+ ((SectionItem)section.getItemAt(itemIndex)).getNote()+"秒"); //设置图片 - ImageUrl.setBackground(holder.itemView.getContext().getResources().getDrawable(R.mipmap.hgr)); + //ImageUrl.setBackground(holder.itemView.getContext().getResources().getDrawable(R.mipmap.hgr)); + myBitmapUtils.disPlay(ImageUrl,"https://hbl-test-1305371387.cos.ap-chengdu.myqcloud.com/Franchisee/001/goods/133329989655737022.jpg"); //上传按钮点击 Sc_text.setOnClickListener(new View.OnClickListener() { @Override diff --git a/app/src/main/res/layout/item/layout/note_rv_tree_second.xml b/app/src/main/res/layout/item/layout/note_rv_tree_second.xml index 8db8fc06..5d5cc1ab 100644 --- a/app/src/main/res/layout/item/layout/note_rv_tree_second.xml +++ b/app/src/main/res/layout/item/layout/note_rv_tree_second.xml @@ -13,7 +13,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> -