package cn.sinata.xldutils.activitys;
|
|
import android.content.Intent;
|
import android.graphics.Bitmap;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Handler.Callback;
|
import android.os.Message;
|
import android.util.TypedValue;
|
import android.view.View;
|
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout.LayoutParams;
|
import cn.sinata.xldutils.R;
|
import cn.sinata.xldutils.utils.BitmapUtils;
|
import cn.sinata.xldutils.utils.DensityUtil;
|
import cn.sinata.xldutils.utils.Toast;
|
import cn.sinata.xldutils.utils.Utils;
|
import cn.sinata.xldutils.view.ClipImageBorderView;
|
import cn.sinata.xldutils.view.ClipZoomImageView;
|
import cn.sinata.xldutils.xldUtils;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
|
/**
|
* 裁剪图片页面
|
*/
|
public class CropImageActivity extends TitleActivity implements Callback{
|
|
private ClipZoomImageView mZoomImageView;
|
private String url;
|
private Handler handler;
|
private Bitmap bitmap;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.cropimage_layout);
|
initView();
|
}
|
|
protected void initView() {
|
|
handler=new Handler(this);
|
|
//比例
|
float scale=getIntent().getFloatExtra("scale", 1f);
|
//裁剪模式
|
int mode=getIntent().getIntExtra("mode", 0);
|
|
setTitle("裁剪图片");
|
addRightButton("确定", new View.OnClickListener() {
|
|
@Override
|
public void onClick(View v) {
|
if (!Utils.ExistSDCard()) {
|
Toast.create(mContext).show("未检测到SD卡!请安装后重试!");
|
return;
|
}
|
if (Utils.getSDFreeSize() < 10) {
|
Toast.create(mContext).show("SD卡剩余空间太小!");
|
return;
|
}
|
final Bitmap bitmap = mZoomImageView.clip();
|
url = xldUtils.PICDIR + System.currentTimeMillis() + ".jpg";
|
showDialog("图片处理中...");
|
if (bitmap != null) {
|
new Thread() {
|
@Override
|
public void run() {
|
super.run();
|
saveBitmapToSDCard(bitmap);
|
handler.sendEmptyMessage(0);
|
}
|
|
}.start();
|
}
|
}
|
});
|
|
RelativeLayout rl_content=bind(R.id.rl_content);
|
|
mZoomImageView = new ClipZoomImageView(this);
|
ClipImageBorderView mClipImageView = new ClipImageBorderView(this);
|
int mHorizontalPadding ;
|
if (scale<1f) {
|
mHorizontalPadding= DensityUtil.dip2px(this, 5);
|
}else {
|
mHorizontalPadding=DensityUtil.dip2px(this, 10);
|
}
|
//如果mode为1,设置展示裁剪区域为圆形
|
if (mode==1) {
|
mClipImageView.setMode(ClipImageBorderView.Mode.Circle);
|
}
|
|
android.view.ViewGroup.LayoutParams lp = new LayoutParams(
|
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
|
android.view.ViewGroup.LayoutParams.MATCH_PARENT);
|
|
rl_content.addView(mClipImageView, lp);
|
rl_content.addView(mZoomImageView, 0, lp);
|
|
mHorizontalPadding = (int) TypedValue.applyDimension(
|
TypedValue.COMPLEX_UNIT_DIP, mHorizontalPadding, getResources()
|
.getDisplayMetrics());
|
mZoomImageView.setHorizontalPadding(mHorizontalPadding);
|
mClipImageView.setHorizontalPadding(mHorizontalPadding);
|
mZoomImageView.setImageScale(scale);
|
mClipImageView.setImageScale(scale);
|
String uri=getIntent().getStringExtra("uri");
|
|
if (uri!=null){
|
bitmap = BitmapUtils.decodeBitmapFromPath(this,uri);
|
if (bitmap == null){
|
Toast.create(this).show("无法打开图片,请检查是否开启读取权限!");
|
}
|
mZoomImageView.setImageBitmap(bitmap);
|
}
|
}
|
|
private void saveBitmapToSDCard(Bitmap bmp){
|
|
String path=xldUtils.PICDIR;
|
File file = new File(path);
|
if (!file.exists()) {
|
//noinspection ResultOfMethodCallIgnored
|
file.mkdirs();
|
}
|
file=new File(url);
|
try {
|
FileOutputStream out = new FileOutputStream(file);
|
if (bmp.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
|
out.flush();
|
out.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public boolean handleMessage(Message msg) {
|
dismissDialog();
|
Intent intent=new Intent();
|
intent.putExtra("path", url);
|
setResult(RESULT_OK, intent);
|
finish();
|
return true;
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
if (bitmap!=null){
|
bitmap.recycle();
|
}
|
}
|
}
|