@@ -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); | |||
@@ -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); | |||
} | |||
/** | |||
* 获取订单信息 | |||
*/ | |||
@@ -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); | |||
} | |||
} |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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<bytes.length;i++){ | |||
String s = Integer.toHexString(0xff&bytes[i]); | |||
if(s.length()==1){ | |||
sb.append("0"+s); | |||
}else{ | |||
sb.append(s); | |||
} | |||
} | |||
return sb.toString(); | |||
} catch (NoSuchAlgorithmException e) { | |||
return "buhuifasheng"; | |||
} | |||
} | |||
} |
@@ -0,0 +1,58 @@ | |||
package com.bonait.bnframework.common.image.utils; | |||
import android.graphics.Bitmap; | |||
import android.util.LruCache; | |||
/** | |||
* 三级缓存之内存缓存 | |||
*/ | |||
public class MemoryCacheUtils { | |||
// private HashMap<String,Bitmap mMemoryCache=new HashMap< ();//1.因为强引用,容易造成内存溢出,所以考虑使用下面弱引用的方法 | |||
// private HashMap<String, SoftReference<Bitmap mMemoryCache = new HashMap< ();//2.因为在Android2.3+后,系统会优先考虑回收弱引用对象,官方提出使用LruCache | |||
private LruCache<String,Bitmap> mMemoryCache; | |||
public MemoryCacheUtils(){ | |||
long maxMemory = Runtime.getRuntime().maxMemory()/8;//得到手机最大允许内存的1/8,即超过指定内存,则开始回收 | |||
//需要传入允许的内存最大值,虚拟机默认内存16M,真机不一定相同 | |||
mMemoryCache=new LruCache<String,Bitmap> ((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<Bitmap bitmapSoftReference = mMemoryCache.get(url); | |||
if (bitmapSoftReference != null) { | |||
Bitmap bitmap = bitmapSoftReference.get(); | |||
return bitmap; | |||
} | |||
*/ | |||
Bitmap bitmap = mMemoryCache.get(url); | |||
return bitmap; | |||
} | |||
/** | |||
* 往内存中写图片 | |||
* @param url | |||
* @param bitmap | |||
*/ | |||
public void setBitmapToMemory(String url, Bitmap bitmap) { | |||
//mMemoryCache.put(url, bitmap);//1.强引用方法 | |||
/*2.弱引用方法 | |||
mMemoryCache.put(url, new SoftReference< (bitmap)); | |||
*/ | |||
mMemoryCache.put(url,bitmap); | |||
} | |||
} |
@@ -0,0 +1,118 @@ | |||
package com.bonait.bnframework.common.image.utils; | |||
import android.graphics.Bitmap; | |||
import android.graphics.BitmapFactory; | |||
import android.os.AsyncTask; | |||
import android.widget.ImageView; | |||
import java.io.IOException; | |||
import java.net.HttpURLConnection; | |||
import java.net.URL; | |||
/** | |||
* 三级缓存之网络缓存 | |||
*/ | |||
public class NetCacheUtils { | |||
private LocalCacheUtils mLocalCacheUtils; | |||
private MemoryCacheUtils mMemoryCacheUtils; | |||
public NetCacheUtils(LocalCacheUtils localCacheUtils, MemoryCacheUtils memoryCacheUtils) { | |||
mLocalCacheUtils = localCacheUtils; | |||
mMemoryCacheUtils = memoryCacheUtils; | |||
} | |||
/** | |||
* 从网络下载图片 | |||
* @param ivPic 显示图片的imageview | |||
* @param url 下载图片的网络地址 | |||
*/ | |||
public void getBitmapFromNet(ImageView ivPic, String url) { | |||
new BitmapTask().execute(ivPic, url);//启动AsyncTask | |||
} | |||
/** | |||
* AsyncTask就是对handler和线程池的封装 | |||
* 第一个泛型:参数类型 | |||
* 第二个泛型:更新进度的泛型 | |||
* 第三个泛型:onPostExecute的返回结果 | |||
*/ | |||
class BitmapTask extends AsyncTask<Object, Void, Bitmap> { | |||
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; | |||
} | |||
} |
@@ -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); | |||
} | |||
@@ -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); | |||
} | |||
@@ -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 | |||
@@ -13,7 +13,7 @@ | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:orientation="vertical"> | |||
<RelativeLayout | |||
<ImageView | |||
android:id="@+id/ImageUrl" | |||
android:layout_margin="3dp" | |||
android:layout_width="match_parent" | |||