package com.donkingliang.imageselector; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import androidx.fragment.app.Fragment; import android.text.format.DateFormat; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import com.donkingliang.imageselector.entry.RequestConfig; import com.donkingliang.imageselector.utils.ImageSelector; import com.donkingliang.imageselector.utils.ImageUtil; import com.donkingliang.imageselector.utils.StringUtils; import com.donkingliang.imageselector.utils.VersionUtils; import com.donkingliang.imageselector.view.ClipImageView; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; public class ClipImageActivity extends Activity { private FrameLayout btnConfirm; private FrameLayout btnBack; private ClipImageView imageView; private int mRequestCode; private boolean isCameraImage; private float cropRatio; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); setContentView(R.layout.activity_clip_image); Intent intent = getIntent(); RequestConfig config = intent.getParcelableExtra(ImageSelector.KEY_CONFIG); mRequestCode = config.requestCode; config.isSingle = true; config.maxSelectCount = 0; cropRatio = config.cropRatio; setStatusBarColor(); ImageSelectorActivity.openActivity(this, mRequestCode, config); initView(); } /** * 修改状态栏颜色 */ private void setStatusBarColor() { if (VersionUtils.isAndroidL()) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.parseColor("#373c3d")); } } private void initView() { imageView = findViewById(R.id.process_img); btnConfirm = findViewById(R.id.btn_confirm); btnBack = findViewById(R.id.btn_back); btnConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (imageView.getDrawable() != null) { btnConfirm.setEnabled(false); confirm(imageView.clipImage()); } } }); btnBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); imageView.setRatio(cropRatio); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null && requestCode == mRequestCode) { ArrayList images = data.getStringArrayListExtra(ImageSelector.SELECT_RESULT); isCameraImage = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false); Bitmap bitmap = ImageUtil.decodeSampledBitmapFromFile(this, images.get(0), 720, 1080); if (bitmap != null) { imageView.setBitmapData(bitmap); } else { finish(); } } else { finish(); } } private void confirm(Bitmap bitmap) { String imagePath = null; if (bitmap != null) { String name = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.getDefault())).toString(); String path = ImageUtil.getImageCacheDir(this); imagePath = ImageUtil.saveImage(bitmap, path, name); bitmap.recycle(); bitmap = null; } if (StringUtils.isNotEmptyString(imagePath)) { ArrayList selectImages = new ArrayList<>(); selectImages.add(imagePath); Intent intent = new Intent(); intent.putStringArrayListExtra(ImageSelector.SELECT_RESULT, selectImages); intent.putExtra(ImageSelector.IS_CAMERA_IMAGE, isCameraImage); setResult(RESULT_OK, intent); } finish(); } /** * 启动图片选择器 * * @param activity * @param requestCode * @param config */ public static void openActivity(Activity activity, int requestCode, RequestConfig config) { Intent intent = new Intent(activity, ClipImageActivity.class); intent.putExtra(ImageSelector.KEY_CONFIG, config); activity.startActivityForResult(intent, requestCode); } /** * 启动图片选择器 * * @param fragment * @param requestCode * @param config */ public static void openActivity(Fragment fragment, int requestCode, RequestConfig config) { Intent intent = new Intent(fragment.getActivity(), ClipImageActivity.class); intent.putExtra(ImageSelector.KEY_CONFIG, config); fragment.startActivityForResult(intent, requestCode); } /** * 启动图片选择器 * * @param fragment * @param requestCode * @param config */ public static void openActivity(android.app.Fragment fragment, int requestCode, RequestConfig config) { Intent intent = new Intent(fragment.getActivity(), ClipImageActivity.class); intent.putExtra(ImageSelector.KEY_CONFIG, config); fragment.startActivityForResult(intent, requestCode); } }