package com.netease.nim.uikit.common.media.picker.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import com.netease.nim.uikit.R;
import com.netease.nim.uikit.common.activity.UI;
import com.netease.nim.uikit.common.ui.imageview.CropImageView;
import com.netease.nim.uikit.common.util.media.BitmapDecoder;
import com.netease.nim.uikit.common.util.media.ImageUtil;
import com.netease.nim.uikit.model.ToolBarOptions;
import com.netease.nim.uikit.session.constant.Extras;
public class CropImageActivity extends UI {
public static final int PICKER_IMAGE_EDIT = 0x1040;
private boolean returnData;
private String filePath;
private CropImageView cropImageView;
public static void startForData(Activity activity, String srcFile, int outputX, int outputY, int requestCode) {
Intent intent = new Intent(activity, CropImageActivity.class);
intent.putExtra(Extras.EXTRA_SRC_FILE, srcFile);
intent.putExtra(Extras.EXTRA_OUTPUTX, outputX);
intent.putExtra(Extras.EXTRA_OUTPUTY, outputY);
intent.putExtra(Extras.EXTRA_RETURN_DATA, true);
activity.startActivityForResult(intent, requestCode);
}
public static void startForFile(Activity activity, String srcFile, int outputX, int outputY, String path,
int requestCode) {
Intent intent = new Intent(activity, CropImageActivity.class);
intent.putExtra(Extras.EXTRA_SRC_FILE, srcFile);
intent.putExtra(Extras.EXTRA_OUTPUTX, outputX);
intent.putExtra(Extras.EXTRA_OUTPUTY, outputY);
intent.putExtra(Extras.EXTRA_FILE_PATH, path);
activity.startActivityForResult(intent, requestCode);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nim_crop_image_activity);
ToolBarOptions options = new ToolBarOptions();
options.titleId = R.string.crop;
setToolBar(R.id.toolbar, options);
processIntent();
initCropImageView();
}
@Override
protected void onDestroy() {
cropImageView.clear();
super.onDestroy();
}
private void processIntent() {
Intent intent = getIntent();
returnData = intent.getBooleanExtra(Extras.EXTRA_RETURN_DATA, false);
filePath = intent.getStringExtra(Extras.EXTRA_FILE_PATH);
}
private void initCropImageView() {
cropImageView = (CropImageView) findViewById(R.id.cropable_image_view);
Intent intent = getIntent();
final String srcFile = intent.getStringExtra(Extras.EXTRA_SRC_FILE);
int outputX = intent.getIntExtra(Extras.EXTRA_OUTPUTX, 0);
int outputY = intent.getIntExtra(Extras.EXTRA_OUTPUTY, 0);
cropImageView.setOutput(outputX, outputY);
// 抛到下一个UI循环,等到我们的activity真正到了前台
// 否则可能会获取不到openGL的最大texture size,导致解出的bitmap过大,显示不了
new Handler().post(new Runnable() {
@Override
public void run() {
Bitmap src = BitmapDecoder.decodeSampledForDisplay(srcFile);
src = ImageUtil.rotateBitmapInNeeded(srcFile, src);
cropImageView.setImageBitmap(src);
}
});
}
public void onClick(View v) {
if (v.getId() == R.id.ok_btn) {
if (returnData) {
byte[] data = cropImageView.getCroppedImage();
if (data != null) {
Intent intent = new Intent();
intent.putExtra(Extras.EXTRA_DATA, data);
setResult(RESULT_OK, intent);
}
finish();
} else {
if (cropImageView.saveCroppedIamge(filePath)) {
setResult(RESULT_OK);
}
finish();
}
} else if (v.getId() == R.id.cancel_btn) {
finish();
}
}
}