關(guān)于cordova-plugin-image-picker
這是ionic官方提供的多圖選擇器插件呻拌,但是從ionic1.0到現(xiàn)在最新版本ionic3.9.2這個(gè)插件的樣式都沒有改過,如下圖所示(Android界面):
看到這樣的界面我也是醉了凸舵,在iOS里可以按照目錄選擇圖片弥鹦,用戶還可以接受。但是在Android里這樣子怎么能忍,接下來我把這個(gè)插件修改一下固逗,還加上了預(yù)覽、刪除藕帜、雙指縮放效果烫罩。只需要修改android代碼就可以,js獲取到的路徑格式和以前一樣洽故,不需修改贝攒。先看下修改過后的效果圖,如下所示:
代碼實(shí)現(xiàn)
1.在gradle里添加?com.foamtrace:photopicker:1.0依賴庫
2.在colors.xml里添加
3.在styles.xml里添加
4.替換ImagePicker.java代碼為
/**
* @author:劉武昌
*/
package com.synconset;
import android.app.Activity;
import android.content.Intent;
import com.foamtrace.photopicker.ImageConfig;
import com.foamtrace.photopicker.PhotoPickerActivity;
import com.foamtrace.photopicker.SelectModel;
import com.foamtrace.photopicker.intent.PhotoPickerIntent;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class ImagePickerextends CordovaPlugin {
public static StringTAG ="ImagePicker";
? private static final int REQUEST_CAMERA_CODE =11;
? private CallbackContextcallbackContext;
? private JSONObjectparams;
? public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext)throws JSONException {
this.callbackContext = callbackContext;
? ? this.params = args.getJSONObject(0);
? ? if (action.equals("getPictures")) {
imageChoose();
? ? }
return true;
? }
public void imageChoose() {
ImageConfig config =new ImageConfig();
? ? config.minHeight =400;
? ? config.minWidth =400;
? ? config.mimeType =new String[]{"image/jpeg", "image/png"};
? ? PhotoPickerIntent intent =new PhotoPickerIntent(cordova.getActivity());
? ? intent.setSelectModel(SelectModel.MULTI);
? ? intent.setMaxTotal(9); // 最多選擇照片數(shù)量时甚,默認(rèn)為9
? ? this.cordova.startActivityForResult(this,intent, REQUEST_CAMERA_CODE);
? }
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && data !=null) {
switch (requestCode) {
// 選擇照片
? ? ? ? case REQUEST_CAMERA_CODE:
ArrayList fileNames =data.getStringArrayListExtra(PhotoPickerActivity.EXTRA_RESULT);
? ? ? ? ? JSONArray res =new JSONArray(fileNames);
? ? ? ? ? this.callbackContext.success(res);
break;
? ? ? }
}else if (resultCode == Activity.RESULT_CANCELED && data !=null) {
String error = data.getStringExtra("ERRORMESSAGE");
? ? ? this.callbackContext.error(error);
? ? }else if (resultCode == Activity.RESULT_CANCELED) {
JSONArray res =new JSONArray();
? ? ? this.callbackContext.success(res);
? ? }else {
this.callbackContext.error("No images selected");
? ? }
}
}