@@ -16,7 +16,10 @@ import com.luck.picture.lib.engine.PictureSelectorEngine
16
16
import com.luck.picture.lib.entity.LocalMedia
17
17
import com.luck.picture.lib.entity.LocalMedia.parseLocalMedia
18
18
import com.luck.picture.lib.listener.OnResultCallbackListener
19
+ import com.luck.picture.lib.manager.UCropManager
19
20
import com.luck.picture.lib.style.PictureParameterStyle
21
+ import com.yalantis.ucrop.model.AspectRatio
22
+ import com.yalantis.ucrop.view.CropImageView
20
23
import java.io.File
21
24
import java.io.FileOutputStream
22
25
import java.io.IOException
@@ -43,18 +46,46 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
43
46
private var isExportThumbnail: Boolean = false
44
47
private var maxVideo: Int = 20
45
48
private var isCamera: Boolean = true
49
+ private var isCrop: Boolean = false
50
+ private var isCropCircle: Boolean = false
46
51
47
52
@ReactMethod
48
53
fun openPicker (options : ReadableMap ? , promise : Promise ): Unit {
49
54
PictureAppMaster .getInstance().app = this
50
55
val activity = currentActivity
51
56
setConfiguration(options)
52
57
58
+ // set up configration ucrop
59
+ val basicUCropConfig = UCropManager .basicOptions(appContext);
60
+ basicUCropConfig.setShowCropFrame(true )
61
+ basicUCropConfig.setShowCropGrid(true )
62
+ basicUCropConfig.setCropDragSmoothToCenter(true )
63
+ basicUCropConfig.setHideBottomControls(false )
64
+ basicUCropConfig.setCircleDimmedLayer(isCropCircle)
65
+ if (isCropCircle){
66
+ basicUCropConfig.withAspectRatio(1F ,1F )
67
+ basicUCropConfig.setShowCropFrame(false )
68
+ }else {
69
+ basicUCropConfig.setAspectRatioOptions(
70
+ 1 ,
71
+ AspectRatio (" 1:2" , 1F , 2F ),
72
+ AspectRatio (" 3:4" , 3F , 4F ),
73
+ // AspectRatio(
74
+ // "RATIO",
75
+ // CropImageView.DEFAULT_ASPECT_RATIO,
76
+ // CropImageView.DEFAULT_ASPECT_RATIO
77
+ // ),
78
+ AspectRatio (" 16:9" , 16F , 9F ),
79
+ AspectRatio (" 1:1" , 1F , 1F )
80
+ )
81
+ }
82
+
53
83
PictureSelector .create(activity)
54
84
.openGallery(if (mediaType == " video" ) PictureMimeType .ofVideo() else if (mediaType == " image" ) PictureMimeType .ofImage() else PictureMimeType .ofAll())
55
85
.loadImageEngine(GlideEngine .createGlideEngine())
56
86
.maxSelectNum(maxSelectedAssets)
57
87
.imageSpanCount(numberOfColumn)
88
+ .isSingleDirectReturn(true )
58
89
.isZoomAnim(true )
59
90
.isPageStrategy(true , 50 )
60
91
.isWithVideoImage(true )
@@ -65,20 +96,12 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
65
96
.setPictureStyle(mPictureParameterStyle)
66
97
.isPreviewImage(isPreview)
67
98
.isPreviewVideo(isPreview)
99
+ .isEnableCrop(isCrop)
100
+ .basicUCropConfig(basicUCropConfig)
68
101
.isCamera(isCamera)
69
- .isReturnEmpty(true )
70
102
.selectionMode(if (singleSelectedMode) PictureConfig .SINGLE else PictureConfig .MULTIPLE )
71
103
.forResult(object : OnResultCallbackListener <LocalMedia ?> {
72
104
override fun onResult (result : MutableList <LocalMedia ?>? ) {
73
- // check difference
74
- if (singleSelectedMode) {
75
- val singleLocalMedia: WritableArray = WritableNativeArray ()
76
- val media: WritableMap =
77
- createAttachmentResponse(result?.get(0 ) as LocalMedia )
78
- singleLocalMedia.pushMap(media)
79
- promise.resolve(singleLocalMedia)
80
- return
81
- }
82
105
val localMedia: WritableArray = WritableNativeArray ()
83
106
if (result?.size == 0 ) {
84
107
promise.resolve(localMedia)
@@ -90,7 +113,6 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
90
113
if (result != null ) {
91
114
for (i in 0 until result.size) {
92
115
val item: LocalMedia = result[i] as LocalMedia
93
- println (" item: $item " )
94
116
val media: WritableMap = createAttachmentResponse(item)
95
117
localMedia.pushMap(media)
96
118
}
@@ -107,6 +129,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
107
129
private fun setConfiguration (options : ReadableMap ? ) {
108
130
if (options != null ) {
109
131
handleSelectedAssets(options)
132
+ val cropping = options.getBoolean(" isCrop" )
110
133
singleSelectedMode = options.getBoolean(" singleSelectedMode" )
111
134
maxVideoDuration = options.getInt(" maxVideoDuration" )
112
135
numberOfColumn = options.getInt(" numberOfColumn" )
@@ -117,16 +140,18 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
117
140
maxVideo = options.getInt(" maxVideo" )
118
141
mPictureParameterStyle = getStyle(options)
119
142
isCamera = options.getBoolean(" usedCameraButton" )
143
+ isCropCircle = options.getBoolean(" isCropCircle" )
144
+ isCrop = cropping == true && singleSelectedMode == true
120
145
}
121
146
}
122
147
123
148
private fun getStyle (options : ReadableMap ): PictureParameterStyle ? {
124
149
val pictureStyle = PictureParameterStyle ()
125
- pictureStyle.pictureCheckedStyle = R .drawable.picture_selector
150
+ pictureStyle.pictureCheckedStyle = if (singleSelectedMode) R .drawable.checkbox_selector else R .drawable.picture_selector
126
151
127
152
// bottom style
128
153
pictureStyle.pictureCompleteText = options.getString(" doneTitle" )
129
- pictureStyle.isOpenCheckNumStyle = true
154
+ pictureStyle.isOpenCheckNumStyle = if (singleSelectedMode) false else true
130
155
pictureStyle.isCompleteReplaceNum = true
131
156
pictureStyle.pictureCompleteTextSize = 16
132
157
pictureStyle.pictureCheckNumBgStyle = R .drawable.num_oval_orange
@@ -218,6 +243,13 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
218
243
media.putDouble(" size" , item.size.toDouble())
219
244
media.putDouble(" bucketId" , item.bucketId.toDouble())
220
245
media.putString(" parentFolderName" , item.parentFolderName)
246
+ if (item.isCut){
247
+ val crop = WritableNativeMap ()
248
+ crop.putString(" cropPath" , item.cutPath)
249
+ crop.putDouble(" width" , item.cropImageWidth.toDouble())
250
+ crop.putDouble(" height" , item.cropImageHeight.toDouble())
251
+ media.putMap(" crop" , crop)
252
+ }
221
253
if (type == = " video" && isExportThumbnail) {
222
254
val thumbnail = createThumbnail(item.realPath)
223
255
println (" thumbnail: $thumbnail " )
0 commit comments