Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
DoraemonKit
提交
44f42778
D
DoraemonKit
项目概览
DiDi
/
DoraemonKit
11 个月 前同步成功
通知
166
Star
19623
Fork
3062
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DoraemonKit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
44f42778
编写于
4月 09, 2020
作者:
J
jackjintai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify:
1、修复图片框架代码
上级
35538acf
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
288 addition
and
90 deletion
+288
-90
Android/app/build.gradle
Android/app/build.gradle
+1
-0
Android/app/src/debug/java/com/didichuxing/doraemondemo/MainDebugActivity.java
.../java/com/didichuxing/doraemondemo/MainDebugActivity.java
+10
-2
Android/config.gradle
Android/config.gradle
+1
-1
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/DokitExtUtil.java
...oovy/com/didichuxing/doraemonkit/plugin/DokitExtUtil.java
+10
-1
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/DokitExtension.java
...vy/com/didichuxing/doraemonkit/plugin/DokitExtension.java
+6
-0
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/DokitBigImageClassAdapter.java
...oraemonkit/plugin/bytecode/DokitBigImageClassAdapter.java
+4
-0
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/bigimg/GlideTransformMethodAdapter.java
...n/bytecode/method/bigimg/GlideTransformMethodAdapter.java
+17
-1
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/bigimg/PicassoMethodAdapter.java
...t/plugin/bytecode/method/bigimg/PicassoMethodAdapter.java
+16
-9
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/fresco/DokitFrescoPostprocessor.java
...raemonkit/aop/bigimg/fresco/DokitFrescoPostprocessor.java
+14
-1
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/DokitGlideRequestListener.java
...raemonkit/aop/bigimg/glide/DokitGlideRequestListener.java
+21
-4
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/DokitGlideTransform.java
...ing/doraemonkit/aop/bigimg/glide/DokitGlideTransform.java
+64
-11
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook.java
...xing/doraemonkit/aop/bigimg/glide/GlideTransformHook.java
+5
-3
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/imageloader/DokitImageLoadingListener.java
...kit/aop/bigimg/imageloader/DokitImageLoadingListener.java
+13
-1
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/picasso/DokitPicassoTransformation.java
...monkit/aop/bigimg/picasso/DokitPicassoTransformation.java
+19
-2
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook.java
...dichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook.java
+16
-9
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/largepicture/LargeImageListAdapter.java
...g/doraemonkit/kit/largepicture/LargeImageListAdapter.java
+34
-8
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/largepicture/LargePictureManager.java
...ing/doraemonkit/kit/largepicture/LargePictureManager.java
+37
-37
未找到文件。
Android/app/build.gradle
浏览文件 @
44f42778
...
...
@@ -65,6 +65,7 @@ android {
dokitExt
{
dokitPluginSwitch
=
true
slowMethodSwitch
=
true
bigImgSwitch
=
true
//单位为ms 1000ms = 1s
thresholdTime
=
200
packageNames
=
[
"com.didichuxing.doraemondemo"
]
...
...
Android/app/src/debug/java/com/didichuxing/doraemondemo/MainDebugActivity.java
浏览文件 @
44f42778
...
...
@@ -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
));
...
...
Android/config.gradle
浏览文件 @
44f42778
...
...
@@ -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:utilcode
x: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
"]}"
,
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/DokitExtUtil.java
浏览文件 @
44f42778
...
...
@@ -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
(
"\\."
,
"/"
));
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/DokitExtension.java
浏览文件 @
44f42778
...
...
@@ -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
+
'}'
;
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/DokitBigImageClassAdapter.java
浏览文件 @
44f42778
...
...
@@ -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
);
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/bigimg/GlideTransformMethodAdapter.java
浏览文件 @
44f42778
...
...
@@ -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
);
...
...
Android/doraemonkit-plugin/src/main/groovy/com/didichuxing/doraemonkit/plugin/bytecode/method/bigimg/PicassoMethodAdapter.java
浏览文件 @
44f42778
...
...
@@ -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
);
}
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/fresco/DokitFrescoPostprocessor.java
浏览文件 @
44f42778
...
...
@@ -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
);
}
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/DokitGlideRequestListener.java
浏览文件 @
44f42778
...
...
@@ -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
;
}
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/DokitGlideTransform.java
浏览文件 @
44f42778
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
p
rotected
Bitmap
transform
(
@NonNull
BitmapPool
pool
,
@NonNull
Bitmap
toTransform
,
int
outWidth
,
int
outHeigh
t
)
{
LogHelper
.
i
(
TAG
,
"===transform====="
);
String
url
=
""
;
if
(
mRequestBuilder
instanceof
RequestBuilder
)
{
url
=
ReflectUtils
.
reflect
(
mRequestBuilder
).
field
(
"model"
).
get
(
);
p
ublic
void
updateDiskCacheKey
(
@NonNull
MessageDigest
messageDiges
t
)
{
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
;
}
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/glide/GlideTransformHook.java
浏览文件 @
44f42778
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
);
}
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/imageloader/DokitImageLoadingListener.java
浏览文件 @
44f42778
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
);
}
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/picasso/DokitPicassoTransformation.java
浏览文件 @
44f42778
...
...
@@ -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
;
}
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/aop/bigimg/picasso/PicassoHook.java
浏览文件 @
44f42778
...
...
@@ -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
;
}
}
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/largepicture/LargeImageListAdapter.java
浏览文件 @
44f42778
...
...
@@ -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
()));
...
...
Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/largepicture/LargePictureManager.java
浏览文件 @
44f42778
...
...
@@ -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
*/
p
rivate
void
saveImageInfo
(
String
url
,
double
memorySize
,
int
width
,
int
height
,
String
framework
)
{
p
ublic
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录