TakePhoto

½éÉÜ£º

Ò»¿îÓÃÓÚÔÚAndroidÉ豸ÉÏ»ñÈ¡ÕÕƬ£¨ÅÄÕÕ»ò´ÓÏà²á¡¢ÎļþÖÐÑ¡Ôñ£©¡¢²Ã¼ôͼƬ¡¢Ñ¹ËõͼƬµÄ¿ªÔ´¹¤¾ß¿â

ÔËÐÐЧ¹û£º

ʹÓÃ˵Ã÷£º

https://crazycodeboy.github.io/TakePhoto

 

°²×°ËµÃ÷

Gradle:

  compile 'com.jph.takephoto:takephoto_library:3.0.0'

Maven:

<dependency>
  <groupId>com.jph.takephoto</groupId>
  <artifactId>takephoto_library</artifactId>
  <version>3.0.0</version>
  <type>pom</type>
</dependency>

ʹÓÃTakePhotoÓÐÒÔÏÂÁ½ÖÖ·½Ê½£º

·½Ê½Ò»£ºÍ¨¹ý¼Ì³ÐµÄ·½Ê½
1. ¼Ì³ÐTakePhotoActivity¡¢TakePhotoFragmentActivity¡¢TakePhotoFragmentÈýÕßÖ®Ò»¡£
2. ͨ¹ýgetTakePhoto()»ñÈ¡TakePhotoʵÀý½øÐÐÏà¹Ø²Ù×÷¡£
3. ÖØдÒÔÏ·½·¨»ñÈ¡½á¹û

 void takeSuccess(TResult result);
 void takeFail(TResult result,String msg);
 void takeCancel();

´Ë·½Ê½Ê¹Óüòµ¥£¬Âú×ãµÄ´ó²¿·ÖµÄʹÓÃÐèÇ󣬾ßÌåʹÓÃÏê¼ûsimple¡£Èç¹ûͨ¹ý¼Ì³ÐµÄ·½Ê½ÎÞ·¨Âú×ãʵ¼ÊÏîÄ¿µÄʹÓ㬿ÉÒÔͨ¹ýÏÂÃæ½éÉܵķ½Ê½¡£

·½Ê½¶þ£ºÍ¨¹ý×é×°µÄ·½Ê½

¿É²ÎÕÕ£ºTakePhotoActivity£¬ÒÔÏÂΪÖ÷Òª²½Ö裺

1.ʵÏÖTakePhoto.TakeResultListener,InvokeListener½Ó¿Ú¡£

2.ÔÚ onCreate,onActivityResult,onSaveInstanceState·½·¨Öе÷ÓÃTakePhoto¶ÔÓõķ½·¨¡£

3.ÖØдonRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)£¬Ìí¼ÓÈçÏ´úÂë¡£

  @Override
    public void onRequestPermissionsResult(int requestCode, String\[\] permissions, int\[\] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //ÒÔÏ´úÂëΪ´¦ÀíAndroid6.0¡¢7.0¶¯Ì¬È¨ÏÞËùÐè
        TPermissionType type=PermissionManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
        PermissionManager.handlePermissionsResult(this,type,invokeParam,this);
    }

4.ÖØдTPermissionType invoke(InvokeParam invokeParam)·½·¨£¬Ìí¼ÓÈçÏ´úÂ룺

 @Override
    public TPermissionType invoke(InvokeParam invokeParam) {
        TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
        if(TPermissionType.WAIT.equals(type)){
            this.invokeParam=invokeParam;
        }
        return type;
    }

5.Ìí¼ÓÈçÏ´úÂë»ñÈ¡TakePhotoʵÀý£º

   /**
     *  »ñÈ¡TakePhotoʵÀý
     * @return
     */
    public TakePhoto getTakePhoto(){
        if (takePhoto==null){
            takePhoto= (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this,this));
        }
        return takePhoto;
    }

API

»ñȡͼƬ

TakePhotoÌṩÅÄÕÕ£¬´ÓÏà²áÑ¡Ôñ£¬´ÓÎļþÖÐÑ¡ÔñÈýÖÖ·½Ê½»ñȡͼƬ¡£

API:

/**
 * ´ÓÎļþÖлñȡͼƬ£¨²»²Ã¼ô£©
 */
void onPickFromDocuments();
/**
 * ´ÓÏà²áÖлñȡͼƬ£¨²»²Ã¼ô£©
 */
void onPickFromGallery();
/**
 * ´ÓÏà»ú»ñȡͼƬ(²»²Ã¼ô)
 * @param outPutUri Í¼Æ¬±£´æµÄ·¾¶
 */
void onPickFromCapture(Uri outPutUri);
/**
 * Í¼Æ¬¶àÑ¡
 * @param limit ×î¶àÑ¡ÔñͼƬÕÅÊýµÄÏÞÖÆ
 **/
void onPickMultiple(int limit);

ÒÔÉÏÈýÖÖ·½Ê½¾ùÌṩ¶ÔÓ¦µÄ²Ã¼ôAPI£¬Ïê¼û£º²Ã¼ôͼƬ¡£
×¢£º
ÓÉÓÚ²»Í¬Android Rom³§É̶ÔϵͳÓв»Í¬³Ì¶ÈµÄ¶¨ÖÆ£¬ÓпÉÄܵ¼ÖÂijÖÖÑ¡ÔñͼƬµÄ·½Ê½²»Ö§³Ö£¬ËùÒÔΪÁËÌá¸ßTakePhotoµÄ¼æÈÝÐÔ£¬µ±Ä³ÖÖÑ¡µÄͼƬµÄ·½Ê½²»Ö§³Öʱ£¬TakePhoto»á×Ô¶¯Çл»³ÉʹÓÃÁíÒ»ÖÖÑ¡ÔñͼƬµÄ·½Ê½½øÐÐͼƬѡÔñ¡£

²Ã¼ôͼƬ

API

TakePhotoÖ§³Ö¶ÔͼƬ½øÐвüô£¬ÎÞÂÛÊÇÅÄÕÕµÄÕÕƬ,»¹ÊÇ´ÓÏà²á¡¢ÎļþÖÐÑ¡ÔñµÄͼƬ¡£ÄãÖ»ÐèÒªµ÷ÓÃTakePhotoµÄÏàÓ¦·½·¨¼´¿É£º

/**
 * ´ÓÏà»ú»ñȡͼƬ²¢²Ã¼ô
 * @param outPutUri Í¼Æ¬²Ã¼ôÖ®ºó±£´æµÄ·¾¶
 * @param options ²Ã¼ôÅäÖà            
 */
void onPickFromCaptureWithCrop(Uri outPutUri, CropOptions options);
/**
 * ´ÓÏà²áÖлñȡͼƬ²¢²Ã¼ô
 * @param outPutUri Í¼Æ¬²Ã¼ôÖ®ºó±£´æµÄ·¾¶
 * @param options ²Ã¼ôÅäÖÃ
 */
void onPickFromGalleryWithCrop(Uri outPutUri, CropOptions options);
/**
 * ´ÓÎļþÖлñȡͼƬ²¢²Ã¼ô
 * @param outPutUri Í¼Æ¬²Ã¼ôÖ®ºó±£´æµÄ·¾¶
 * @param options ²Ã¼ôÅäÖÃ
 */
void onPickFromDocumentsWithCrop(Uri outPutUri, CropOptions options);
/**
 * Í¼Æ¬¶àÑ¡£¬²¢²ÃÇÐ
 * @param limit ×î¶àÑ¡ÔñͼƬÕÅÊýµÄÏÞÖÆ
 * @param options  ²Ã¼ôÅäÖÃ
 * */
void onPickMultipleWithCrop(int limit, CropOptions options);

¶ÔÖ¸¶¨Í¼Æ¬½øÐвüô

ÁíÍ⣬TakePhotoÒ²Ö§³ÖÄã¶ÔÖ¸¶¨Í¼Æ¬½øÐвüô£º

/**
 * ²Ã¼ôͼƬ
 * @param imageUri Òª²Ã¼ôµÄͼƬ
 * @param outPutUri Í¼Æ¬²Ã¼ôÖ®ºó±£´æµÄ·¾¶
 * @param options ²Ã¼ôÅäÖÃ
 */
void onCrop(Uri imageUri, Uri outPutUri, CropOptions options)throws TException;
/**
 * ²Ã¼ô¶àÕÅͼƬ
 * @param multipleCrop Òª²ÃÇеÄͼƬµÄ·¾¶ÒÔ¼°Êä³ö·¾¶
 * @param options ²Ã¼ôÅäÖÃ
 */
void onCrop(MultipleCrop multipleCrop, CropOptions options)throws TException;

CropOptions

CropOptionsÊÇÓÃÓڲüôµÄÅäÖÃÀ࣬ͨ¹ýËüÄã¿ÉÒÔ¶ÔͼƬµÄ²Ã¼ô±ÈÀý£¬×î´óÊä³ö´óС£¬ÒÔ¼°ÊÇ·ñʹÓÃTakePhoto×Ô´øµÄ²Ã¼ô¹¤¾ß½øÐвüôµÈ£¬½øÐиöÐÔ»¯ÅäÖá£

Usage:

 CropOptions cropOptions=new CropOptions.Builder().setAspectX(1).setAspectY(1).setWithOwnCrop(true).create();  
 getTakePhoto().onPickFromDocumentsWithCrop(imageUri,cropOptions);  
 //»ò  
 getTakePhoto().onCrop(imageUri,outPutUri,cropOptions);

×¢£º
ÓÉÓÚ²»Í¬Android Rom³§É̶ÔϵͳÓв»Í¬³Ì¶ÈµÄ¶¨ÖÆ£¬ÓпÉÄÜϵͳÖÐûÓÐ×Ô´ø»òµÚÈý·½µÄ²Ã¼ô¹¤¾ß£¬ËùÒÔΪÁËÌá¸ßTakePhotoµÄ¼æÈÝÐÔ£¬µ±ÏµÍ³ÖÐûÓÐ×Ô´ø»òµÚÈý·½²Ã¼ô¹¤¾ßʱ£¬TakePhoto»á×Ô¶¯Çл»µ½Ê¹ÓÃTakePhoto×Ô´øµÄ²Ã¼ô¹¤¾ß½øÐвüô¡£

ѹËõͼƬ

Äã¿ÉÒÔÑ¡ÔñÊÇ·ñ¶ÔͼƬ½øÐÐѹËõ´¦Àí£¬ÄãÖ»ÐèÒª¸æËßËüÄãÊÇ·ñÒªÆôÓÃѹËõ¹¦ÄÜÒÔ¼°CompressConfig¼´¿É¡£

API

 /**
  * ÆôÓÃͼƬѹËõ
  * @param config Ñ¹ËõͼƬÅäÖÃ
  * @param showCompressDialog Ñ¹ËõʱÊÇ·ñÏÔʾ½ø¶È¶Ô»°¿ò
  * @return
  */
 void onEnableCompress(CompressConfig config,boolean showCompressDialog);

Usage:

TakePhoto takePhoto=getTakePhoto();
takePhoto.onEnableCompress(compressConfig,true);
takePhoto.onPickFromGallery();

Èç¹ûÄãÆôÓÃÁËͼƬѹËõ£¬TakePhoto»áʹÓÃCompressImage¶ÔͼƬ½øÐÐѹËõ´¦Àí£¬CompressImageÄ¿Ç°Ö§³Ö¶ÔͼƬµÄ³ß´çÒÔ¼°Í¼Æ¬µÄÖÊÁ¿½øÐÐѹËõ¡£Ä¬ÈÏÇé¿öÏ£¬CompressImage¿ªÆôÁ˳ߴçÓëÖÊÁ¿Ë«ÖØѹËõ¡£

¶ÔÖ¸¶¨Í¼Æ¬½øÐÐѹËõ

ÁíÍ⣬ÄãÒ²¿ÉÒÔ¶ÔÖ¸¶¨Í¼Æ¬½øÐÐѹËõ£º
Usage:

new CompressImageImpl(compressConfig,result.getImages(), new CompressImage.CompressListener() {
    @Override
    public void onCompressSuccess(ArrayList<TImage> images) {
        //ͼƬѹËõ³É¹¦
    }
    @Override
    public void onCompressFailed(ArrayList<TImage> images, String msg) {
        //ͼƬѹËõʧ°Ü
    }
}).compress();

CompressConfig

CompressConfigÊÇÓÃÓÚͼƬѹËõµÄÅäÖÃÀ࣬Äã¿ÉÒÔͨ¹ýCompressConfig.Builder¶ÔͼƬѹËõºóµÄ³ß´çÒÔ¼°ÖÊÁ¿½øÐÐÏà¹ØÉèÖá£Èç¹ûÄãÏë¸Ä±äѹËõµÄ·½Ê½¿ÉÒÔͨ¹ýCompressConfig.Builder½øÐÐÏà¹ØÉèÖá£
Usage:

CompressConfig compressConfig=new CompressConfig.Builder().setMaxSize(50*1024).setMaxPixel(800).create();

¼æÈÝÐÔ

Android6.0

ÓÉÓÚAndroid6.0ÐÂÔöÁË"ÔËÐÐʱȨÏÞ¿ØÖÆ(Runtime Permissions)"£¬ÎªÁËÓ¦¶ÔÕâÒ»¸Ä±ä£¬TakePhoto¼ÓÈëºÍ×Ô¶¯È¨ÏÞ¹ÜÀí£¬µ±TakePhoto¼ì²âµ½ÐèҪȨÏÞʱ£¬TakePhoto»á×Ô¶¯ÉêÇëȨÏÞ£¬ËùÒÔС»ï°éÃDz»Óõ£ÐÄȨÏÞµÄʹÓÃÎÊÌâ¡£

Android7.0

ÔÚAndroid NÖУ¬Android ¿ò¼ÜÖ´ÐÐÁË StrictMode£¬Ó¦Óü乲ÏíÎļþºÍÒÔÇ°Ò²ÓÐËùÇø±ð¡£ÎªÁËÊÊÅäAndroid7.0µÄ¸Ä±ä£¬Í¬Ê±Ò²ÎªÁË·½±ã´ó¼ÒʹÓÃTakePhoto£¬TakePhoto»á×Ô¶¯¸ù¾ÝÊÖ»úµÄAndroid°æ±¾×ÔÐÐÊÊÅ䣬С»ï°éÃÇÒÀ¾É¿ÉÒÔÏòTakePhoto´«µÝUri imageUri = Uri.fromFile(file);ÀàÐ͵ÄUri¶ø²»Óõ£ÐļæÈÝÐÔÎÊÌâ¡£

TakePhotoÔÚÉî¶È¼æÈÝÐÔ·½ÃæµÄ²âÊÔ

¼æÈÝÐÔ²âÊÔ±¨¸æ

»ñÈ¡¸ü¸ßµÄ¼æÈÝÐÔ

TakePhotoÊÇ»ùÓÚAndroid¹Ù·½±ê×¼API±àдµÄ£¬ÊÊÅäÁËÄ¿Ç°Êг¡ÉÏÖ÷Á÷µÄRom¡£Èç¹ûÄãÔÚʹÓùý³ÌÖз¢ÏÖÁËÊÊÅäÎÊÌ⣬¿ÉÒÔÌá½»Issues¡£
1. ΪÊÊÅ䲿·ÖÊÖ»úÅÄÕÕʱ»á»ØÊÕActivity£¬TakePhotoÔÚonSaveInstanceStateÓë onCreate×öÁËÏàÓ¦µÄ»Ö¸´´¦Àí¡£
2. ΪÊÊÅ䲿·ÖÊÖ»úÅÄÕÕ»ò´ÓÏà²áÑ¡ÔñͼƬʱÆÁÄ»·½Ïò»á·¢Éúת±ä,´Ó¶øµ¼ÖÂÅÄÕÕʧ°ÜµÄÎÊÌ⣬¿ÉÒÔÔÚAndroidManifest.xmlÖжÔʹÓÃÁËTakePhotoµÄActivityÌí¼Óandroid:configChanges="orientation|keyboardHidden|screenSize"ÅäÖá£
eg:

<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
已下载
0