当前位置: 首页 > 工具软件 > uCrop > 使用案例 >

android裁剪视频框架,android图像裁剪框架uCrop

耿永寿
2023-12-01

第一步先导入依赖

implementation 'com.github.yalantis:ucrop:2.2.1'

implementation 'pub.devrel:easypermissions:1.2.0' //权限库

下面开始上代码

这个是重点 网上很多这里就不解释,可以自己问度娘

/**

* 裁剪图片

*

* @param sourceUri

*/

private void startUCrop(Uri sourceUri) {

UCrop.Options options = new UCrop.Options();

//裁剪后图片保存在文件夹中

Uri destinationUri = Uri.fromFile(new File(FileUtil.checkDirPath(Environment.getExternalStorageDirectory() + "/upload/"), "uCrop.jpg"));

UCrop uCrop = UCrop.of(sourceUri, destinationUri);//第一个参数是裁剪前的uri,第二个参数是裁剪后的uri

options.setAllowedGestures( com.yalantis.ucrop.UCropActivity.SCALE, com.yalantis.ucrop.UCropActivity.ROTATE, com.yalantis.ucrop.UCropActivity.ALL );

//设置隐藏底部容器,默认显示

//options.setHideBottomControls(true);

//设置toolbar颜色

options.setToolbarColor( ActivityCompat.getColor( this, R.color.colorPrimary ) );

//设置状态栏颜色

options.setStatusBarColor( ActivityCompat.getColor( this, R.color.colorPrimary ) );

//是否能调整裁剪框

options.setFreeStyleCropEnabled( true );

uCrop.withOptions( options );

uCrop.start(this);

}

所以代码

import android.Manifest;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.net.Uri;

import android.os.Build;

import android.os.Environment;

import android.provider.MediaStore;

import android.support.annotation.NonNull;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.FileProvider;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.WindowManager;

import android.widget.ImageView;

import android.widget.PopupWindow;

import android.widget.TextView;

import android.widget.Toast;

import com.lightheart.sphr.doctor.BuildConfig;

import com.lightheart.sphr.doctor.R;

import com.lightheart.sphr.doctor.base.BaseActivity;

import com.lightheart.sphr.doctor.utils.FileUtil;

import com.yalantis.ucrop.UCrop;

import java.io.File;

import java.util.List;

import butterknife.BindView;

import pub.devrel.easypermissions.AfterPermissionGranted;

import pub.devrel.easypermissions.AppSettingsDialog;

import pub.devrel.easypermissions.EasyPermissions;

import static com.lightheart.sphr.doctor.app.Constant.RC_CAMERA_PERM;

import static com.lightheart.sphr.doctor.app.Constant.RC_READ_EXTERNAL_STORAGE;

import static com.lightheart.sphr.doctor.app.Constant.REQUEST_CAPTURE;

import static com.lightheart.sphr.doctor.app.Constant.REQUEST_PICK;

import static com.lightheart.sphr.doctor.utils.FileUtil.getRealFilePathFromUri;

public class Main3Activity extends BaseActivity implements EasyPermissions.PermissionCallbacks {

@BindView(R.id.tv)

TextView tv;

@BindView(R.id.clvHeadImage)

ImageView clvHeadImage;

private File tempFile;

@Override

protected int getLayoutId() {

return R.layout.activity_main3;

}

@Override

protected void initInjector() {

}

@Override

protected void initView() {

tv.setOnClickListener( new View.OnClickListener() {

@Override

public void onClick(View v) {

uploadHeadImage();

}

} );

}

/**

* 上传头像

*/

private void uploadHeadImage() {

View view = LayoutInflater.from( this ).inflate( R.layout.layout_photo_select, null );

View btnCamera = view.findViewById( R.id.btn_camera );

View btnPhoto = view.findViewById( R.id.btn_photo );

View btnCancel = view.findViewById( R.id.btn_cancel );

final PopupWindow popupWindow = new PopupWindow( view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT );

popupWindow.setBackgroundDrawable( getResources().getDrawable( android.R.color.transparent ) );

popupWindow.setOutsideTouchable( true );

View parent = LayoutInflater.from( this ).inflate( R.layout.activity_main, null );

popupWindow.showAtLocation( parent, Gravity.BOTTOM, 0, 0 );

//popupWindow在弹窗的时候背景半透明

final WindowManager.LayoutParams params = getWindow().getAttributes();

params.alpha = 0.5f;

getWindow().setAttributes( params );

popupWindow.setOnDismissListener( new PopupWindow.OnDismissListener() {

@Override

public void onDismiss() {

params.alpha = 1.0f;

getWindow().setAttributes( params );

}

} );

btnCamera.setOnClickListener( new View.OnClickListener() {

@Override

public void onClick(View v) {

//权限判断

cameraTask();

popupWindow.dismiss();

}

} );

btnPhoto.setOnClickListener( new View.OnClickListener() {

@Override

public void onClick(View v) {

//权限判断

photoAlbum();

popupWindow.dismiss();

}

} );

btnCancel.setOnClickListener( new View.OnClickListener() {

@Override

public void onClick(View v) {

popupWindow.dismiss();

}

} );

}

@AfterPermissionGranted(RC_READ_EXTERNAL_STORAGE)

public void photoAlbum() {

if (hasReadStoragePermission()) {

// Have permission, do the thing!

gotoPhoto();

} else {

// Ask for one permission

EasyPermissions.requestPermissions(

this,

getString( R.string.rationale_camera ),

RC_READ_EXTERNAL_STORAGE,

Manifest.permission.READ_EXTERNAL_STORAGE );

}

}

@AfterPermissionGranted(RC_CAMERA_PERM)

public void cameraTask() {

if (hasCameraPermission()) {

// Have permission, do the thing!

gotoCamera();

} else {

// Ask for one permission

EasyPermissions.requestPermissions(

this,

getString( R.string.rationale_camera ),

RC_CAMERA_PERM,

Manifest.permission.CAMERA );

}

}

/**

* 跳转到相册

*/

private void gotoPhoto() {

Log.d( "evan", "*****************打开图库********************" );

//跳转到调用系统图库

Intent intent = new Intent( Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI );

startActivityForResult( Intent.createChooser( intent, "请选择图片" ), REQUEST_PICK );

}

/**

* 跳转到照相机

*/

private void gotoCamera() {

Log.d( "evan", "*****************打开相机********************" );

//创建拍照存储的图片文件

tempFile = new File( FileUtil.checkDirPath( Environment.getExternalStorageDirectory().getPath() + "/image/" ), System.currentTimeMillis() + ".jpg" );

//跳转到调用系统相机

Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE );

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

//设置7.0中共享文件,分享路径定义在xml/file_paths.xml

intent.setFlags( Intent.FLAG_GRANT_WRITE_URI_PERMISSION );

Uri contentUri = FileProvider.getUriForFile( Main3Activity.this, BuildConfig.APPLICATION_ID + ".fileProvider", tempFile );

intent.putExtra( MediaStore.EXTRA_OUTPUT, contentUri );

} else {

intent.putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile( tempFile ) );

}

startActivityForResult( intent, REQUEST_CAPTURE );

}

/**

* 裁剪图片

*

* @param sourceUri

*/

private void startUCrop(Uri sourceUri) {

UCrop.Options options = new UCrop.Options();

//裁剪后图片保存在文件夹中

Uri destinationUri = Uri.fromFile(new File(FileUtil.checkDirPath(Environment.getExternalStorageDirectory() + "/upload/"), "uCrop.jpg"));

UCrop uCrop = UCrop.of(sourceUri, destinationUri);//第一个参数是裁剪前的uri,第二个参数是裁剪后的uri

options.setAllowedGestures( com.yalantis.ucrop.UCropActivity.SCALE, com.yalantis.ucrop.UCropActivity.ROTATE, com.yalantis.ucrop.UCropActivity.ALL );

//设置隐藏底部容器,默认显示

//options.setHideBottomControls(true);

//设置toolbar颜色

options.setToolbarColor( ActivityCompat.getColor( this, R.color.colorPrimary ) );

//设置状态栏颜色

options.setStatusBarColor( ActivityCompat.getColor( this, R.color.colorPrimary ) );

//是否能调整裁剪框

options.setFreeStyleCropEnabled( true );

uCrop.withOptions( options );

uCrop.start(this);

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult( requestCode, resultCode, data );

switch (requestCode) {

case REQUEST_CAPTURE: //调用系相机返回

if (resultCode == RESULT_OK) {

Uri uri = Uri.fromFile( tempFile );

Log.d( "uri_uri", "" + uri );

if (uri != null) {

startUCrop( uri );

}

} else {

Toast.makeText( this, "取消", Toast.LENGTH_SHORT ).show();

}

break;

case REQUEST_PICK: //调用系统相册返回

if (resultCode == RESULT_OK) {

Uri uri = data.getData();

if (uri != null) {

startUCrop( uri );

}

}

break;

case UCrop.REQUEST_CROP: //剪切图片返回

Uri uri = UCrop.getOutput( data );

Log.d( "uri_uri", "" + uri );

if (uri != null) {

String cropImagePath = getRealFilePathFromUri( getApplicationContext(), uri );

Bitmap bitMap = BitmapFactory.decodeFile( cropImagePath );

clvHeadImage.setImageBitmap( bitMap );

Log.d( "bitMap_bitMap", "" + bitMap );

}

break;

}

}

private boolean hasCameraPermission() {

return EasyPermissions.hasPermissions( this, Manifest.permission.CAMERA );

}

private boolean hasReadStoragePermission() {

return EasyPermissions.hasPermissions( this, Manifest.permission.READ_EXTERNAL_STORAGE );

}

@Override

public void onRequestPermissionsResult(int requestCode,

@NonNull String[] permissions,

@NonNull int[] grantResults) {

super.onRequestPermissionsResult( requestCode, permissions, grantResults );

// EasyPermissions handles the request result.

EasyPermissions.onRequestPermissionsResult( requestCode, permissions, grantResults, this );

}

@Override

public void onPermissionsGranted(int requestCode, @NonNull Listperms) {

}

@Override

public void onPermissionsDenied(int requestCode, @NonNull Listperms) {

// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."

// This will display a dialog directing them to enable the permission in app settings.

if (EasyPermissions.somePermissionPermanentlyDenied( this, perms )) {

new AppSettingsDialog.Builder( this ).build().show();

}

}

}

//布局文件

 类似资料: