提交 44f42778 编写于 作者: J jackjintai

modify:

1、修复图片框架代码
上级 35538acf
......@@ -65,6 +65,7 @@ android {
dokitExt {
dokitPluginSwitch = true
slowMethodSwitch = true
bigImgSwitch = true
//单位为ms 1000ms = 1s
thresholdTime = 200
packageNames = ["com.didichuxing.doraemondemo"]
......
......@@ -37,6 +37,9 @@ import com.baidu.location.LocationClientOption;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ThreadUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.didichuxing.doraemonkit.DoraemonKit;
import com.didichuxing.doraemonkit.kit.network.common.CommonHeaders;
import com.didichuxing.doraemonkit.kit.network.common.CommonInspectorRequest;
......@@ -357,13 +360,18 @@ public class MainDebugActivity extends BaseActivity implements View.OnClickListe
String imageLoaderImageUrl = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1584969662891&di=acaf549645e58b6c67c231d495e18271&imgtype=0&src=http%3A%2F%2Ft8.baidu.com%2Fit%2Fu%3D3571592872%2C3353494284%26fm%3D79%26app%3D86%26f%3DJPEG%3Fw%3D1200%26h%3D1290";
Picasso.get().load(picassoImgUrl)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.placeholder(R.drawable.dk_health_bg)
.error(R.drawable.dk_health_bg)
.into((ImageView) findViewById(R.id.iv_picasso));
Glide.with(MainDebugActivity.this)
.asBitmap()
.load(glideImageUrl)
//.diskCacheStrategy(DiskCacheStrategy.NONE)
//.skipMemoryCache(true)
.placeholder(R.drawable.dk_health_bg)
.error(R.drawable.dk_health_bg)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.transform(new CircleCrop())
.into((ImageView) findViewById(R.id.iv_glide));
......
......@@ -47,7 +47,7 @@ ext {
//将urlconnection代理到okhttp
//"okhttp_urlconnection" : "com.squareup.okhttp3:okhttp-urlconnection:3.12.1",
//"okio" : "com.squareup.okio:okio:1.15.0",
"utilcode" : 'com.blankj:utilcode:1.27.1',
"utilcode" : 'com.blankj:utilcodex:1.27.5',
"glide" : "com.github.bumptech.glide:glide:${android["glide_version"]}",
"glide_v3" : 'com.github.bumptech.glide:glide:3.8.0',
"glide_okhttp3" : "com.github.bumptech.glide:okhttp3-integration:${android["glide_version"]}",
......
......@@ -24,6 +24,10 @@ public class DokitExtUtil {
* 慢函数开关
*/
private boolean mSlowMethodSwitch = true;
/**
* 大图检测开关
*/
public boolean mBigImgSwitch = true;
/**
* 单位为ms 默认500ms
*/
......@@ -40,6 +44,10 @@ public class DokitExtUtil {
return mSlowMethodSwitch;
}
public boolean isBigImgSwitch() {
return mBigImgSwitch;
}
public int getThresholdTime() {
return mThresholdTime;
}
......@@ -63,13 +71,14 @@ public class DokitExtUtil {
* 初始化
*
* @param dokitExtension dokitExtension
* @param appExtension appExtension
* @param appExtension appExtension
*/
public void init(DokitExtension dokitExtension, AppExtension appExtension) {
if (dokitExtension != null) {
this.mDokitPluginSwitch = dokitExtension.dokitPluginSwitch;
this.mSlowMethodSwitch = dokitExtension.slowMethodSwitch;
this.mThresholdTime = dokitExtension.thresholdTime;
this.mBigImgSwitch = dokitExtension.bigImgSwitch;
mPackageNames.clear();
for (String packageName : dokitExtension.packageNames) {
mPackageNames.add(packageName.replaceAll("\\.", "/"));
......
......@@ -20,6 +20,11 @@ public class DokitExtension {
* 慢函数开关
*/
public boolean slowMethodSwitch = true;
/**
* 大图检测开关
*/
public boolean bigImgSwitch = true;
/**
* 单位为ms 默认500ms
*/
......@@ -35,6 +40,7 @@ public class DokitExtension {
", duplcatedClassSafeMode=" + duplcatedClassSafeMode +
", dokitPluginSwitch=" + dokitPluginSwitch +
", slowMethodSwitch=" + slowMethodSwitch +
", bigImgSwitch=" + bigImgSwitch +
", thresholdTime=" + thresholdTime +
", packageNames=" + packageNames +
'}';
......
......@@ -65,6 +65,10 @@ public final class DokitBigImageClassAdapter extends ClassVisitor {
if (!DokitExtUtil.getInstance().isDokitPluginSwitch()) {
return mv;
}
if (!DokitExtUtil.getInstance().isBigImgSwitch()) {
return mv;
}
//Glide v4字节码替换 glide v4.9 通过init注入 4.11.0 通用构造函数
if (className.equals("com/bumptech/glide/request/SingleRequest") && (methodName.equals("init") || methodName.equals("<init>")) && desc != null) {
log(className, access, methodName, desc, signature);
......
......@@ -32,16 +32,32 @@ public class GlideTransformMethodAdapter extends AdviceAdapter {
@Override
protected void onMethodEnter() {
super.onMethodEnter();
// mv.visitVarInsn(ALOAD, 0);
// mv.visitLdcInsn(Type.getType("Landroid/graphics/Bitmap;"));
// mv.visitVarInsn(ALOAD, 0);
// mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook", "transform", "(Ljava/lang/Object;)Lcom/bumptech/glide/load/resource/bitmap/BitmapTransformation;", false);
// mv.visitVarInsn(ILOAD, 2);
// mv.visitMethodInsn(INVOKEVIRTUAL, "com/bumptech/glide/request/BaseRequestOptions", "transform", "(Ljava/lang/Class;Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;", false);
// mv.visitInsn(POP);
}
@Override
protected void onMethodExit(int opcode) {
super.onMethodExit(opcode);
// mv.visitVarInsn(ALOAD, 0);
// mv.visitLdcInsn(Type.getType("Landroid/graphics/Bitmap;"));
// mv.visitVarInsn(ALOAD, 0);
// mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook", "transform", "(Ljava/lang/Object;)Lcom/bumptech/glide/load/resource/bitmap/BitmapTransformation;", false);
// mv.visitVarInsn(ILOAD, 2);
// mv.visitMethodInsn(INVOKEVIRTUAL, "com/bumptech/glide/request/BaseRequestOptions", "transform", "(Ljava/lang/Class;Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;", false);
// mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, 0);
mv.visitLdcInsn(Type.getType("Landroid/graphics/Bitmap;"));
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook", "transform", "(Ljava/lang/Object;)Lcom/bumptech/glide/load/resource/bitmap/BitmapTransformation;", false);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook", "transform", "(Ljava/lang/Object;Ljava/lang/Object;)Lcom/bumptech/glide/load/Transformation;", false);
mv.visitVarInsn(ILOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, "com/bumptech/glide/request/BaseRequestOptions", "transform", "(Ljava/lang/Class;Lcom/bumptech/glide/load/Transformation;Z)Lcom/bumptech/glide/request/BaseRequestOptions;", false);
mv.visitInsn(POP);
......
......@@ -31,15 +31,22 @@ public final class PicassoMethodAdapter extends AdviceAdapter {
}
// @Override
// protected void onMethodEnter() {
// super.onMethodEnter();
// //加载第一个参数 uri
// mv.visitVarInsn(ALOAD, 1);
// //加载第四个参数 List<Transformation> transformations
// mv.visitVarInsn(ALOAD, 4);
// mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook", "proxy", "(Landroid/net/Uri;Ljava/util/List;)Ljava/util/List;", false);
// //重新赋值给第4个参数 List<Transformation> transformations
// mv.visitVarInsn(ASTORE, 4);
// }
@Override
protected void onMethodEnter() {
super.onMethodEnter();
//加载第一个参数 uri
mv.visitVarInsn(ALOAD, 1);
//加载第四个参数 List<Transformation> transformations
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook", "proxy", "(Landroid/net/Uri;Ljava/util/List;)Ljava/util/List;", false);
//重新赋值给第4个参数 List<Transformation> transformations
mv.visitVarInsn(ASTORE, 4);
protected void onMethodExit(int opcode) {
super.onMethodExit(opcode);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "com/didichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook", "proxy", "(Ljava/lang/Object;)V", false);
}
}
......@@ -3,14 +3,19 @@ package com.didichuxing.doraemonkit.aop.bigimg.fresco;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import androidx.annotation.Nullable;
import com.blankj.utilcode.constant.MemoryConstants;
import com.blankj.utilcode.util.ConvertUtils;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
import com.facebook.cache.common.CacheKey;
import com.facebook.common.references.CloseableReference;
import com.facebook.imagepipeline.bitmaps.PlatformBitmapFactory;
import com.facebook.imagepipeline.nativecode.Bitmaps;
import com.facebook.imagepipeline.request.Postprocessor;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import static com.facebook.imagepipeline.request.BasePostprocessor.FALLBACK_BITMAP_CONFIGURATION;
......@@ -37,7 +42,15 @@ public class DokitFrescoPostprocessor implements Postprocessor {
@Override
public CloseableReference<Bitmap> process(Bitmap sourceBitmap, PlatformBitmapFactory bitmapFactory) {
sourceBitmap = LargePictureManager.getInstance().transform(mUri.toString(), sourceBitmap, false, "Fresco");
try {
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
double imgSize = ConvertUtils.byte2MemorySize(sourceBitmap.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(mUri.toString(), imgSize, sourceBitmap.getWidth(), sourceBitmap.getHeight(), "Fresco");
}
} catch (Exception e) {
e.printStackTrace();
}
if (mOriginalPostprocessor != null) {
return mOriginalPostprocessor.process(sourceBitmap, bitmapFactory);
}
......
......@@ -5,10 +5,14 @@ import android.graphics.drawable.BitmapDrawable;
import androidx.annotation.Nullable;
import com.blankj.utilcode.constant.MemoryConstants;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ImageUtils;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
/**
......@@ -30,11 +34,24 @@ public class DokitGlideRequestListener<R> implements RequestListener<R> {
@Override
public boolean onResourceReady(R resource, Object model, Target<R> target, DataSource dataSource, boolean isFirstResource) {
if (resource instanceof Bitmap) {
LargePictureManager.getInstance().transform(model.toString(), (Bitmap) resource, false, "Glide");
} else if (resource instanceof BitmapDrawable) {
LargePictureManager.getInstance().transform(model.toString(), (BitmapDrawable) resource, false, "Glide");
try {
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
Bitmap bitmap;
if (resource instanceof Bitmap) {
bitmap = (Bitmap) resource;
double imgSize = ConvertUtils.byte2MemorySize(bitmap.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(model.toString(), imgSize, bitmap.getWidth(), bitmap.getHeight(), "Glide");
} else if (resource instanceof BitmapDrawable) {
bitmap = ImageUtils.drawable2Bitmap((BitmapDrawable) resource);
double imgSize = ConvertUtils.byte2MemorySize(bitmap.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(model.toString(), imgSize, bitmap.getWidth(), bitmap.getHeight(), "Glide");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
......
package com.didichuxing.doraemonkit.aop.bigimg.glide;
import android.content.Context;
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import com.blankj.utilcode.constant.MemoryConstants;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.ReflectUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
import com.didichuxing.doraemonkit.util.LogHelper;
......@@ -22,29 +30,74 @@ import java.security.MessageDigest;
* 修订历史:
* ================================================
*/
public class DokitGlideTransform extends BitmapTransformation {
public class DokitGlideTransform implements Transformation<Bitmap> {
private static final String ID = "com.didichuxing.doraemonkit.aop.bigimg.glide.DokitGlideTransform";
private static final byte[] ID_BYTES = ID.getBytes(CHARSET);
private static final String TAG = "DokitGlideTransform";
private Object mRequestBuilder;
private Transformation mWrap;
public DokitGlideTransform(Object mRequestBuilder) {
public DokitGlideTransform(Object mRequestBuilder, Object transformation) {
this.mRequestBuilder = mRequestBuilder;
if (transformation instanceof Transformation) {
this.mWrap = (Transformation) transformation;
}
}
@Override
protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
LogHelper.i(TAG, "===transform=====");
String url = "";
if (mRequestBuilder instanceof RequestBuilder) {
url = ReflectUtils.reflect(mRequestBuilder).field("model").get();
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
if (mWrap != null) {
mWrap.updateDiskCacheKey(messageDigest);
} else {
messageDigest.update(ID_BYTES);
}
toTransform = LargePictureManager.getInstance().transform(url, toTransform, false, "Glide");
return toTransform;
}
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
messageDigest.update(ID_BYTES);
public boolean equals(Object o) {
if (mWrap != null) {
return mWrap.equals(o);
}
return false;
}
@Override
public int hashCode() {
if (mWrap != null) {
return mWrap.hashCode();
}
return 0;
}
@NonNull
@Override
public Resource<Bitmap> transform(@NonNull Context context, @NonNull Resource<Bitmap> resource, int outWidth, int outHeight) {
try {
if (mWrap != null) {
resource = mWrap.transform(context, resource, outWidth, outHeight);
}
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
String url = "";
if (mRequestBuilder instanceof RequestBuilder) {
if (ReflectUtils.reflect(mRequestBuilder).field("model").get() instanceof String) {
url = ReflectUtils.reflect(mRequestBuilder).field("model").get();
} else if (ReflectUtils.reflect(mRequestBuilder).field("model").get() instanceof Integer) {
url = "" + ReflectUtils.reflect(mRequestBuilder).field("model").get();
}
}
Bitmap bitmap = resource.get();
double imgSize = ConvertUtils.byte2MemorySize(bitmap.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(url, imgSize, bitmap.getWidth(), bitmap.getHeight(), "Glide");
}
} catch (Exception e) {
if (mWrap != null) {
resource = mWrap.transform(context, resource, outWidth, outHeight);
}
}
return resource;
}
}
package com.didichuxing.doraemonkit.aop.bigimg.glide;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import android.graphics.Bitmap;
import com.bumptech.glide.load.Transformation;
/**
* ================================================
......@@ -12,7 +14,7 @@ import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
* ================================================
*/
public class GlideTransformHook {
public static BitmapTransformation transform(Object baseRequestOptions) {
return new DokitGlideTransform(baseRequestOptions);
public static Transformation<Bitmap> transform(Object baseRequestOptions, Object transformation) {
return new DokitGlideTransform(baseRequestOptions, transformation);
}
}
package com.didichuxing.doraemonkit.aop.bigimg.imageloader;
import android.graphics.Bitmap;
import androidx.annotation.Nullable;
import android.view.View;
import com.blankj.utilcode.constant.MemoryConstants;
import com.blankj.utilcode.util.ConvertUtils;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
......@@ -45,7 +50,14 @@ public class DokitImageLoadingListener implements ImageLoadingListener {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
LargePictureManager.getInstance().transform(imageUri, loadedImage, false, "ImageLoader");
try {
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
double imgSize = ConvertUtils.byte2MemorySize(loadedImage.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(imageUri, imgSize, loadedImage.getWidth(), loadedImage.getHeight(), "ImageLoader");
}
} catch (Exception e) {
e.printStackTrace();
}
if (mOriginalImageLoadingListener != null) {
mOriginalImageLoadingListener.onLoadingComplete(imageUri, view, loadedImage);
}
......
......@@ -3,6 +3,9 @@ package com.didichuxing.doraemonkit.aop.bigimg.picasso;
import android.graphics.Bitmap;
import android.net.Uri;
import com.blankj.utilcode.constant.MemoryConstants;
import com.blankj.utilcode.util.ConvertUtils;
import com.didichuxing.doraemonkit.config.PerformanceSpInfoConfig;
import com.didichuxing.doraemonkit.kit.largepicture.LargePictureManager;
import com.squareup.picasso.Transformation;
......@@ -18,14 +21,28 @@ import com.squareup.picasso.Transformation;
public class DokitPicassoTransformation implements Transformation {
private static final String TAG = "DokitTransformation";
private Uri mUri;
private int mResourceId;
public DokitPicassoTransformation(Uri uri) {
public DokitPicassoTransformation(Uri uri, int resourceId) {
this.mUri = uri;
this.mResourceId = resourceId;
}
@Override
public Bitmap transform(Bitmap source) {
source = LargePictureManager.getInstance().transform(mUri.toString(), source, true, "Picasso");
try {
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
if (mUri != null) {
double imgSize = ConvertUtils.byte2MemorySize(source.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo(mUri.toString(), imgSize, source.getWidth(), source.getHeight(), "Picasso");
} else {
double imgSize = ConvertUtils.byte2MemorySize(source.getByteCount(), MemoryConstants.MB);
LargePictureManager.getInstance().saveImageInfo("" + mResourceId, imgSize, source.getWidth(), source.getHeight(), "Picasso");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return source;
}
......
......@@ -3,6 +3,8 @@ package com.didichuxing.doraemonkit.aop.bigimg.picasso;
import android.net.Uri;
import com.blankj.utilcode.util.ReflectUtils;
import com.squareup.picasso.Request;
import com.squareup.picasso.Transformation;
import java.util.ArrayList;
......@@ -22,20 +24,25 @@ public class PicassoHook {
/**
* 注入到com.squareup.picasso.Request 构造方法中
*/
public static List<Transformation> proxy(Uri uri, List<Transformation> transformations) {
public static void proxy(Object request) {
try {
if (transformations == null) {
transformations = new ArrayList<>();
transformations.add(new DokitPicassoTransformation(uri));
} else {
transformations.add(new DokitPicassoTransformation(uri));
if (request instanceof Request) {
Request requestObj = (Request) request;
List<Transformation> transformations = requestObj.transformations;
if (transformations == null) {
transformations = new ArrayList<>();
transformations.add(new DokitPicassoTransformation(requestObj.uri, requestObj.resourceId));
} else {
transformations.clear();
transformations.add(new DokitPicassoTransformation(requestObj.uri, requestObj.resourceId));
}
ReflectUtils.reflect(request).field("transformations", transformations);
}
return transformations;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
......@@ -78,14 +78,40 @@ public class LargeImageListAdapter extends AbsRecyclerAdapter<AbsViewBinder<Larg
@Override
public void bind(final LargeImageInfo largeImageInfo) {
DokitPicasso.with(DoraemonKit.APPLICATION)
.load(largeImageInfo.getUrl())
.memoryPolicy(MemoryPolicy.NO_CACHE)
.resize(ConvertUtils.dp2px(100), ConvertUtils.dp2px(100))
.centerCrop()
.into(iv);
tvLink.setText(largeImageInfo.getUrl());
tvFrameWork.setText(String.format("framework:%s", largeImageInfo.getFramework()));
try {
int resourceUrl = Integer.parseInt(largeImageInfo.getUrl());
DokitPicasso.with(DoraemonKit.APPLICATION)
.load(resourceUrl)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.resize(ConvertUtils.dp2px(100), ConvertUtils.dp2px(100))
.centerCrop()
.into(iv);
tvLink.setText("resource id:" + resourceUrl);
} catch (Exception e) {
DokitPicasso.with(DoraemonKit.APPLICATION)
.load(largeImageInfo.getUrl())
.memoryPolicy(MemoryPolicy.NO_CACHE)
.resize(ConvertUtils.dp2px(100), ConvertUtils.dp2px(100))
.centerCrop()
.into(iv);
tvLink.setText(largeImageInfo.getUrl());
}
if (largeImageInfo.getMemorySize() == 0) {
tvFrameWork.setText(String.format("framework:%s", "network"));
tvMemorySize.setVisibility(View.GONE);
tvSize.setVisibility(View.GONE);
} else {
tvFrameWork.setText(String.format("framework:%s", largeImageInfo.getFramework()));
tvMemorySize.setVisibility(View.VISIBLE);
tvSize.setVisibility(View.VISIBLE);
}
if (largeImageInfo.getFileSize() == 0) {
tvFileSize.setVisibility(View.GONE);
} else {
tvFileSize.setVisibility(View.VISIBLE);
}
tvFileSize.setText(String.format("fileSize:%s", mDecimalFormat.format(largeImageInfo.getFileSize()) + "KB"));
tvMemorySize.setText(String.format("memorySize:%s", mDecimalFormat.format(largeImageInfo.getMemorySize()) + "MB"));
tvSize.setText(String.format("width:%s height:%s", largeImageInfo.getWidth(), largeImageInfo.getHeight()));
......
......@@ -19,7 +19,7 @@ import java.util.Map;
/**
* @author: linjizong
* 2019-07-05
* 2019-07-05
* @desc: 大图检测管理类
*/
public class LargePictureManager {
......@@ -101,7 +101,7 @@ public class LargePictureManager {
* @param width
* @param height
*/
private void saveImageInfo(String url, double memorySize, int width, int height, String framework) {
public void saveImageInfo(String url, double memorySize, int width, int height, String framework) {
if (ActivityUtils.getTopActivity() instanceof UniversalActivity) {
return;
}
......@@ -119,40 +119,40 @@ public class LargePictureManager {
largeImageInfo.setFramework(framework);
}
public Bitmap transform(String imageUrl, BitmapDrawable bitmapDrawable, boolean isPicasso, String framework) {
Bitmap sourceBitmap = ImageUtils.drawable2Bitmap(bitmapDrawable);
return transform(imageUrl, sourceBitmap, isPicasso, framework);
}
public Bitmap transform(String imageUrl, Bitmap sourceBitmap, boolean isPicasso, String framework) {
if (ActivityUtils.getTopActivity() instanceof UniversalActivity) {
return sourceBitmap;
}
if (PerformanceSpInfoConfig.isLargeImgOpen()) {
double imgSize = ConvertUtils.byte2MemorySize(sourceBitmap.getByteCount(), MemoryConstants.MB);
String strImageSize = mDecimalFormat.format(imgSize) + "MB";
//picasso需要创建新的bitmap进行操作
if (isPicasso) {
Bitmap newBitmap = Bitmap.createBitmap(sourceBitmap);
saveImageInfo(imageUrl, imgSize, newBitmap.getWidth(), newBitmap.getHeight(), framework);
if (imgSize > memoryThreshold) {
newBitmap = ImageUtils.addTextWatermark(newBitmap, "MS:" + strImageSize, ConvertUtils.sp2px(16), Color.RED, newBitmap.getWidth() / 2 - ConvertUtils.sp2px(16) * strImageSize.length() / 2, newBitmap.getHeight() / 2);
sourceBitmap.recycle();
return newBitmap;
} else {
return sourceBitmap;
}
}
saveImageInfo(imageUrl, imgSize, sourceBitmap.getWidth(), sourceBitmap.getHeight(), framework);
if (imgSize > memoryThreshold) {
sourceBitmap = ImageUtils.addTextWatermark(sourceBitmap, "MS:" + strImageSize, ConvertUtils.sp2px(16), Color.RED, sourceBitmap.getWidth() / 2 - ConvertUtils.sp2px(16) * strImageSize.length() / 2, sourceBitmap.getHeight() / 2);
}
return sourceBitmap;
}
return sourceBitmap;
}
// public Bitmap transform(String imageUrl, BitmapDrawable bitmapDrawable, boolean isPicasso, String framework) {
// Bitmap sourceBitmap = ImageUtils.drawable2Bitmap(bitmapDrawable);
// return transform(imageUrl, sourceBitmap, isPicasso, framework);
// }
// public Bitmap transform(String imageUrl, Bitmap sourceBitmap, boolean isPicasso, String framework) {
// if (ActivityUtils.getTopActivity() instanceof UniversalActivity) {
// return sourceBitmap;
// }
// if (PerformanceSpInfoConfig.isLargeImgOpen()) {
// double imgSize = ConvertUtils.byte2MemorySize(sourceBitmap.getByteCount(), MemoryConstants.MB);
// String strImageSize = mDecimalFormat.format(imgSize) + "MB";
// //picasso需要创建新的bitmap进行操作
// if (isPicasso) {
// Bitmap newBitmap = Bitmap.createBitmap(sourceBitmap);
// saveImageInfo(imageUrl, imgSize, newBitmap.getWidth(), newBitmap.getHeight(), framework);
// if (imgSize > memoryThreshold) {
// newBitmap = ImageUtils.addTextWatermark(newBitmap, "MS:" + strImageSize, ConvertUtils.sp2px(16), Color.RED, newBitmap.getWidth() / 2 - ConvertUtils.sp2px(16) * strImageSize.length() / 2, newBitmap.getHeight() / 2);
// sourceBitmap.recycle();
// return newBitmap;
// } else {
// return sourceBitmap;
// }
//
// }
//
// saveImageInfo(imageUrl, imgSize, sourceBitmap.getWidth(), sourceBitmap.getHeight(), framework);
// if (imgSize > memoryThreshold) {
// sourceBitmap = ImageUtils.addTextWatermark(sourceBitmap, "MS:" + strImageSize, ConvertUtils.sp2px(16), Color.RED, sourceBitmap.getWidth() / 2 - ConvertUtils.sp2px(16) * strImageSize.length() / 2, sourceBitmap.getHeight() / 2);
// }
// return sourceBitmap;
// }
// return sourceBitmap;
// }
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册