Skip to content

Commit d772d00

Browse files
committed
doing refactor android
1 parent 49a6bfc commit d772d00

File tree

8 files changed

+146
-146
lines changed

8 files changed

+146
-146
lines changed

android/build.gradle

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,17 @@ dependencies {
124124
// noinspection GradleDynamicVersion
125125
api 'com.facebook.react:react-native:+'
126126
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
127-
implementation 'io.github.lucksiege:pictureselector:v3.10.7'
128-
implementation 'io.github.lucksiege:compress:v3.10.7'
129127
implementation 'com.github.bumptech.glide:glide:4.12.0'
130128
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
129+
// PictureSelector basic (Necessary)
130+
implementation 'io.github.lucksiege:pictureselector:v3.10.9'
131+
132+
// image compress library (Not necessary)
133+
implementation 'io.github.lucksiege:compress:v3.10.9'
134+
135+
// uCrop library (Not necessary)
136+
implementation 'io.github.lucksiege:ucrop:v3.10.9'
137+
138+
// simple camerax library (Not necessary)
139+
implementation 'io.github.lucksiege:camerax:v3.10.9'
131140
}
Lines changed: 74 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,158 +1,113 @@
11
package com.reactnativemultipleimagepicker
22

33
import android.content.Context
4-
import android.graphics.Bitmap
5-
import android.graphics.PointF
6-
import android.graphics.drawable.Drawable
7-
import android.view.View
84
import android.widget.ImageView
9-
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
105
import com.bumptech.glide.Glide
11-
import com.bumptech.glide.request.RequestOptions
12-
import com.bumptech.glide.request.target.BitmapImageViewTarget
13-
import com.bumptech.glide.request.target.ImageViewTarget
6+
import com.bumptech.glide.load.resource.bitmap.CenterCrop
7+
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
148
import com.luck.picture.lib.engine.ImageEngine
15-
import com.luck.picture.lib.listener.OnImageCompleteCallback
16-
import com.luck.picture.lib.tools.MediaUtils
17-
import com.luck.picture.lib.widget.longimage.ImageSource
18-
import com.luck.picture.lib.widget.longimage.ImageViewState
19-
import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView
9+
import com.luck.picture.lib.utils.ActivityCompatHelper
2010

11+
12+
/**
13+
* @author:luck
14+
* @date:2019-11-13 17:02
15+
* @describe:Glide加载引擎
16+
*/
2117
class GlideEngine private constructor() : ImageEngine {
18+
/**
19+
* 加载图片
20+
*
21+
* @param context 上下文
22+
* @param url 资源url
23+
* @param imageView 图片承载控件
24+
*/
2225
override fun loadImage(context: Context, url: String, imageView: ImageView) {
26+
if (!ActivityCompatHelper.assertValidRequest(context)) {
27+
return
28+
}
2329
Glide.with(context)
2430
.load(url)
2531
.into(imageView)
2632
}
2733

28-
/**
29-
* @param context
30-
* @param url
31-
* @param imageView
32-
* @param longImageView
33-
* @param callback
34-
*/
35-
override fun loadImage(context: Context, url: String,
36-
imageView: ImageView,
37-
longImageView: SubsamplingScaleImageView, callback: OnImageCompleteCallback) {
34+
override fun loadImage(
35+
context: Context,
36+
imageView: ImageView,
37+
url: String,
38+
maxWidth: Int,
39+
maxHeight: Int
40+
) {
41+
if (!ActivityCompatHelper.assertValidRequest(context)) {
42+
return
43+
}
3844
Glide.with(context)
39-
.asBitmap()
4045
.load(url)
41-
.into(object : ImageViewTarget<Bitmap?>(imageView) {
42-
override fun onLoadStarted(placeholder: Drawable?) {
43-
super.onLoadStarted(placeholder)
44-
callback.onShowLoading()
45-
}
46-
47-
override fun onLoadFailed(errorDrawable: Drawable?) {
48-
super.onLoadFailed(errorDrawable)
49-
callback.onHideLoading()
50-
}
51-
52-
override fun setResource(resource: Bitmap?) {
53-
callback.onHideLoading()
54-
if (resource != null) {
55-
val eqLongImage = MediaUtils.isLongImg(resource.width,
56-
resource.height)
57-
longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE
58-
imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
59-
if (eqLongImage) {
60-
longImageView.isQuickScaleEnabled = true
61-
longImageView.isZoomEnabled = true
62-
longImageView.setDoubleTapZoomDuration(100)
63-
longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
64-
longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
65-
longImageView.setImage(ImageSource.bitmap(resource),
66-
ImageViewState(0.toFloat(), PointF(0.toFloat(), 0.toFloat()), 0))
67-
} else {
68-
imageView.setImageBitmap(resource)
69-
}
70-
}
71-
}
72-
})
46+
.override(maxWidth, maxHeight)
47+
.into(imageView)
7348
}
7449

7550
/**
76-
* @param context
77-
* @param url
78-
* @param imageView
79-
* @param longImageView
51+
* 加载相册目录封面
52+
*
53+
* @param context 上下文
54+
* @param url 图片路径
55+
* @param imageView 承载图片ImageView
8056
*/
81-
override fun loadImage(context: Context, url: String,
82-
imageView: ImageView,
83-
longImageView: SubsamplingScaleImageView) {
84-
Glide.with(context)
85-
.asBitmap()
86-
.load(url)
87-
.into(object : ImageViewTarget<Bitmap?>(imageView) {
88-
override fun setResource(resource: Bitmap?) {
89-
if (resource != null) {
90-
val eqLongImage = MediaUtils.isLongImg(resource.width,
91-
resource.height)
92-
longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE
93-
imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE
94-
if (eqLongImage) {
95-
longImageView.isQuickScaleEnabled = true
96-
longImageView.isZoomEnabled = true
97-
longImageView.setDoubleTapZoomDuration(100)
98-
longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP)
99-
longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)
100-
longImageView.setImage(ImageSource.bitmap(resource),
101-
ImageViewState(0.toFloat(), PointF(0.toFloat(), 0.toFloat()), 0))
102-
} else {
103-
imageView.setImageBitmap(resource)
104-
}
105-
}
106-
}
107-
})
108-
}
109-
110-
override fun loadFolderImage(context: Context, url: String, imageView: ImageView) {
57+
override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
58+
if (!ActivityCompatHelper.assertValidRequest(context)) {
59+
return
60+
}
11161
Glide.with(context)
11262
.asBitmap()
11363
.load(url)
11464
.override(180, 180)
115-
.centerCrop()
11665
.sizeMultiplier(0.5f)
117-
.apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder))
118-
.into(object : BitmapImageViewTarget(imageView) {
119-
override fun setResource(resource: Bitmap?) {
120-
val circularBitmapDrawable = RoundedBitmapDrawableFactory.create(context.resources, resource)
121-
circularBitmapDrawable.cornerRadius = 8f
122-
imageView.setImageDrawable(circularBitmapDrawable)
123-
}
124-
})
125-
}
126-
127-
override fun loadAsGifImage(context: Context, url: String,
128-
imageView: ImageView) {
129-
Glide.with(context)
130-
.asGif()
131-
.load(url)
66+
.transform(CenterCrop(), RoundedCorners(8))
67+
.placeholder(R.drawable.ps_image_placeholder)
13268
.into(imageView)
13369
}
13470

71+
/**
72+
* 加载图片列表图片
73+
*
74+
* @param context 上下文
75+
* @param url 图片路径
76+
* @param imageView 承载图片ImageView
77+
*/
13578
override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
79+
if (!ActivityCompatHelper.assertValidRequest(context)) {
80+
return
81+
}
13682
Glide.with(context)
13783
.load(url)
13884
.override(200, 200)
13985
.centerCrop()
140-
.apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder))
86+
.placeholder(R.drawable.ps_image_placeholder)
14187
.into(imageView)
14288
}
14389

144-
companion object {
145-
private var instance: GlideEngine? = null
146-
fun createGlideEngine(): GlideEngine? {
147-
if (null == instance) {
148-
synchronized(GlideEngine::class.java) {
149-
if (null == instance) {
150-
instance = GlideEngine()
151-
}
152-
}
153-
}
154-
return instance
90+
override fun pauseRequests(context: Context) {
91+
if (!ActivityCompatHelper.assertValidRequest(context)) {
92+
return
15593
}
94+
Glide.with(context).pauseRequests()
15695
}
157-
}
15896

97+
override fun resumeRequests(context: Context) {
98+
if (!ActivityCompatHelper.assertValidRequest(context)) {
99+
return
100+
}
101+
Glide.with(context).resumeRequests()
102+
}
103+
104+
private object InstanceHolder {
105+
val instance = GlideEngine()
106+
}
107+
108+
companion object {
109+
fun createGlideEngine(): GlideEngine {
110+
return InstanceHolder.instance
111+
}
112+
}
113+
}

android/src/main/java/com/reactnativemultipleimagepicker/MultipleImagePickerModule.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import android.media.MediaMetadataRetriever
77
import android.os.Build
88
import androidx.annotation.RequiresApi
99
import com.facebook.react.bridge.*
10-
import com.luck.picture.lib.PictureSelector
10+
import com.luck.picture.lib.basic.PictureSelector
1111
import com.luck.picture.lib.app.IApp
1212
import com.luck.picture.lib.app.PictureAppMaster
1313
import com.luck.picture.lib.config.PictureConfig
1414
import com.luck.picture.lib.config.PictureMimeType
15+
import com.luck.picture.lib.config.SelectMimeType
16+
import com.luck.picture.lib.config.SelectModeConfig
1517
import com.luck.picture.lib.engine.PictureSelectorEngine
1618
import com.luck.picture.lib.entity.LocalMedia
1719
import com.luck.picture.lib.entity.LocalMedia.parseLocalMedia
@@ -77,10 +79,12 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
7779
)
7880
}
7981

82+
var imageEngine = GlideEngine.createGlideEngine();
83+
8084
PictureSelector.create(activity)
81-
.openGallery(if (mediaType == "video") PictureMimeType.ofVideo() else if (mediaType == "image") PictureMimeType.ofImage() else PictureMimeType.ofAll())
82-
.loadImageEngine(GlideEngine.createGlideEngine())
83-
.maxSelectNum(maxSelectedAssets)
85+
.openGallery(if (mediaType == "video") SelectMimeType.ofVideo() else if (mediaType == "image") PictureMimeType.ofImage() else PictureMimeType.ofAll())
86+
.setImageEngine(imageEngine)
87+
.setMaxSelectNum(maxSelectedAssets)
8488
.imageSpanCount(numberOfColumn)
8589
.isSingleDirectReturn(true)
8690
.isZoomAnim(true)
@@ -96,7 +100,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
96100
.isEnableCrop(isCrop)
97101
.basicUCropConfig(basicUCropConfig)
98102
.isCamera(isCamera)
99-
.selectionMode(if (singleSelectedMode) PictureConfig.SINGLE else PictureConfig.MULTIPLE)
103+
.selectionMode(if (singleSelectedMode) SelectModeConfig.SINGLE else SelectModeConfig.MULTIPLE)
100104
.forResult(object : OnResultCallbackListener<LocalMedia?> {
101105
override fun onResult(result: MutableList<LocalMedia?>?) {
102106
val localMedia: WritableArray = WritableNativeArray()

0 commit comments

Comments
 (0)