lmw
2023-06-13 4b7d8d9a038f6522df46d0f14fa07eb940a1b34d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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();
        }
    }
}