Commit 926c5e84b3c6f8cdbc9ef5547fdf5807580cfa80

Authored by shixianjie
1 parent ae79188a18
Exists in master

框选页面添加查看原图

app/src/main/java/com/hjx/parent/ImageActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.app.Dialog; 4 import android.app.Dialog;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.graphics.Bitmap; 6 import android.graphics.Bitmap;
7 import android.graphics.BitmapFactory; 7 import android.graphics.BitmapFactory;
8 import android.graphics.Rect; 8 import android.graphics.Rect;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.Bundle; 10 import android.os.Bundle;
11 import android.os.Handler; 11 import android.os.Handler;
12 import android.provider.MediaStore; 12 import android.provider.MediaStore;
13 import android.text.TextUtils; 13 import android.text.TextUtils;
14 import android.util.Log; 14 import android.util.Log;
15 import android.view.KeyEvent; 15 import android.view.KeyEvent;
16 import android.view.View; 16 import android.view.View;
17 17
18 18
19 import androidx.annotation.Nullable; 19 import androidx.annotation.Nullable;
20 import androidx.core.content.FileProvider; 20 import androidx.core.content.FileProvider;
21 import androidx.viewpager2.widget.ViewPager2; 21 import androidx.viewpager2.widget.ViewPager2;
22 22
23 import com.google.gson.Gson; 23 import com.google.gson.Gson;
24 import com.google.gson.JsonObject; 24 import com.google.gson.JsonObject;
25 import com.hjx.parent.adapter.ImageAdapter; 25 import com.hjx.parent.adapter.ImageAdapter;
26 import com.hjx.parent.databinding.ActivityImageBinding; 26 import com.hjx.parent.databinding.ActivityImageBinding;
27 import com.hjx.parent.dialog.AddHomeworkDialog; 27 import com.hjx.parent.dialog.AddHomeworkDialog;
28 import com.hjx.parent.dialog.ErrorInputDialog; 28 import com.hjx.parent.dialog.ErrorInputDialog;
29 import com.hjx.parent.dialog.PhotoViewDialog; 29 import com.hjx.parent.dialog.PhotoViewDialog;
30 import com.hjx.parent.dialog.TipDialog; 30 import com.hjx.parent.dialog.TipDialog;
31 import com.hjx.parent.rx.BaseRxActivity; 31 import com.hjx.parent.rx.BaseRxActivity;
32 import com.prws.common.bean.CutPicBean; 32 import com.prws.common.bean.CutPicBean;
33 import com.prws.common.bean.ImageBean; 33 import com.prws.common.bean.ImageBean;
34 import com.prws.common.bean.TopicBean; 34 import com.prws.common.bean.TopicBean;
35 import com.prws.common.net.NetWorks; 35 import com.prws.common.net.NetWorks;
36 import com.prws.common.utils.BitmapUtils; 36 import com.prws.common.utils.BitmapUtils;
37 import com.prws.common.utils.CommonUtil; 37 import com.prws.common.utils.CommonUtil;
38 import com.xiasuhuei321.loadingdialog.view.LoadingDialog; 38 import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
39 39
40 import java.io.File; 40 import java.io.File;
41 import java.util.ArrayList; 41 import java.util.ArrayList;
42 import java.util.List; 42 import java.util.List;
43 43
44 import io.reactivex.Observer; 44 import io.reactivex.Observer;
45 import io.reactivex.disposables.Disposable; 45 import io.reactivex.disposables.Disposable;
46 import retrofit2.Call; 46 import retrofit2.Call;
47 import retrofit2.Callback; 47 import retrofit2.Callback;
48 import retrofit2.Response; 48 import retrofit2.Response;
49 49
50 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener { 50 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener {
51 51
52 private List<String> images = new ArrayList<>(); 52 private List<String> images = new ArrayList<>();
53 private ImageAdapter imageAdapter; 53 private ImageAdapter imageAdapter;
54 private List<ImageBean> list = new ArrayList<>(); 54 private List<ImageBean> list = new ArrayList<>();
55 private String filePath; 55 private String filePath;
56 56
57 private int type = 0; 57 private int type = 0;
58 private AddHomeworkDialog addHomeworkDialog; 58 private AddHomeworkDialog addHomeworkDialog;
59 59
60 @Override 60 @Override
61 public void initView(Bundle savedInstanceState) { 61 public void initView(Bundle savedInstanceState) {
62 type = getIntent().getIntExtra("type", 0); 62 type = getIntent().getIntExtra("type", 0);
63 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目"); 63 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目");
64 64
65 images = getIntent().getStringArrayListExtra("images"); 65 images = getIntent().getStringArrayListExtra("images");
66 for (String s : images) { 66 for (String s : images) {
67 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 67 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
68 ImageBean imageBean = new ImageBean(); 68 ImageBean imageBean = new ImageBean();
69 Bitmap bitmap = BitmapUtils.getimage(s); 69 Bitmap bitmap = BitmapUtils.getimage(s);
70 CommonUtil.saveBitmapToUri(bitmap, filepath); 70 CommonUtil.saveBitmapToUri(bitmap, filepath);
71 imageBean.setPath(filepath); 71 imageBean.setPath(filepath);
72 imageBean.source = filepath; 72 imageBean.source = filepath;
73 list.add(imageBean); 73 list.add(imageBean);
74 } 74 }
75 imageAdapter = new ImageAdapter(this, list); 75 imageAdapter = new ImageAdapter(this, list);
76 binding.viewPager.setAdapter(imageAdapter); 76 binding.viewPager.setAdapter(imageAdapter);
77 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { 77 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
78 @Override 78 @Override
79 public void onPageSelected(int position) { 79 public void onPageSelected(int position) {
80 if (list.get(position).getCuts() == null) { 80 if (list.get(position).getCuts() == null) {
81 // binding.ivPrevious.setEnabled(false); 81 // binding.ivPrevious.setEnabled(false);
82 // binding.ivNext.setEnabled(false); 82 // binding.ivNext.setEnabled(false);
83 clearText(); 83 clearText();
84 } 84 }
85 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 85 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
86 if (position == 0) { 86 if (position == 0) {
87 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray); 87 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray);
88 // binding.ivPrevious.setEnabled(true); 88 // binding.ivPrevious.setEnabled(true);
89 } else { 89 } else {
90 binding.ivPrevious.setImageResource(R.mipmap.ic_previous); 90 binding.ivPrevious.setImageResource(R.mipmap.ic_previous);
91 // binding.ivPrevious.setEnabled(false); 91 // binding.ivPrevious.setEnabled(false);
92 } 92 }
93 if (position == list.size() - 1) { 93 if (position == list.size() - 1) {
94 binding.ivNext.setImageResource(R.mipmap.ic_next_gray); 94 binding.ivNext.setImageResource(R.mipmap.ic_next_gray);
95 // binding.ivNext.setEnabled(true); 95 // binding.ivNext.setEnabled(true);
96 } else { 96 } else {
97 binding.ivNext.setImageResource(R.mipmap.ic_next); 97 binding.ivNext.setImageResource(R.mipmap.ic_next);
98 // binding.ivNext.setEnabled(false); 98 // binding.ivNext.setEnabled(false);
99 } 99 }
100 super.onPageSelected(position); 100 super.onPageSelected(position);
101 } 101 }
102 }); 102 });
103 binding.rlNext.setOnClickListener(this); 103 binding.rlNext.setOnClickListener(this);
104 binding.rlPrevious.setOnClickListener(this); 104 binding.rlPrevious.setOnClickListener(this);
105 binding.ivBack.setOnClickListener(this); 105 binding.ivBack.setOnClickListener(this);
106 binding.tvPhoto.setOnClickListener(this); 106 binding.tvPhoto.setOnClickListener(this);
107 binding.tvAdd.setOnClickListener(this); 107 binding.tvAdd.setOnClickListener(this);
108 binding.llEdit.setOnClickListener(this); 108 binding.llEdit.setOnClickListener(this);
109 binding.tvSave.setOnClickListener(this); 109 binding.tvSave.setOnClickListener(this);
110 binding.btnShowSource.setOnClickListener(v -> { 110 binding.btnShowSource.setOnClickListener(v -> {
111 if (list.isEmpty()) return; 111 if (list.isEmpty()) return;
112 ImageBean data = list.get(binding.viewPager.getCurrentItem()); 112 ImageBean data = list.get(binding.viewPager.getCurrentItem());
113 new PhotoViewDialog(this).show(data.source); 113 new PhotoViewDialog(this).show(data.source);
114 }); 114 });
115 } 115 }
116 116
117 public void clearText() { 117 public void clearText() {
118 int index = binding.viewPager.getCurrentItem(); 118 int index = binding.viewPager.getCurrentItem();
119 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() { 119 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() {
120 @Override 120 @Override
121 public void dimiss() { 121 public void dimiss() {
122 // binding.ivPrevious.setEnabled(index != 0); 122 // binding.ivPrevious.setEnabled(index != 0);
123 // binding.ivNext.setEnabled(index != list.size() - 1); 123 // binding.ivNext.setEnabled(index != list.size() - 1);
124 } 124 }
125 }); 125 });
126 Log.i("clearText", list.get(index).getPath()); 126 Log.i("clearText", list.get(index).getPath());
127 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath()); 127 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath());
128 NetWorks.removeWriting(base64, new Observer<JsonObject>() { 128 NetWorks.removeWriting(base64, new Observer<JsonObject>() {
129 @Override 129 @Override
130 public void onSubscribe(Disposable d) { 130 public void onSubscribe(Disposable d) {
131 131
132 } 132 }
133 133
134 @Override 134 @Override
135 public void onNext(JsonObject jsonObject) { 135 public void onNext(JsonObject jsonObject) {
136 if (jsonObject != null && jsonObject.get("image_processed") != null) { 136 if (jsonObject != null && jsonObject.get("image_processed") != null) {
137 String image = jsonObject.get("image_processed").getAsString(); 137 String image = jsonObject.get("image_processed").getAsString();
138 if (image != null) { 138 if (image != null) {
139 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 139 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
140 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath); 140 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath);
141 list.get(index).setPath(filepath); 141 list.get(index).setPath(filepath);
142 if (list.get(index).getCuts() == null) { 142 if (list.get(index).getCuts() == null) {
143 list.get(index).setCuts(new ArrayList<>()); 143 list.get(index).setCuts(new ArrayList<>());
144 } 144 }
145 imageAdapter.notifyItemChanged(index); 145 imageAdapter.notifyItemChanged(index);
146 cut(filepath); 146 cut(filepath);
147 } else { 147 } else {
148 loadFail("去除字迹失败"); 148 loadFail("去除字迹失败");
149 } 149 }
150 } else { 150 } else {
151 loadFail("去除字迹失败"); 151 loadFail("去除字迹失败");
152 } 152 }
153 } 153 }
154 154
155 @Override 155 @Override
156 public void onError(Throwable e) { 156 public void onError(Throwable e) {
157 loadFail("去除字迹失败"); 157 loadFail("去除字迹失败");
158 } 158 }
159 159
160 @Override 160 @Override
161 public void onComplete() { 161 public void onComplete() {
162 162
163 } 163 }
164 }); 164 });
165 } 165 }
166 166
167 public void cut(String path) { 167 public void cut(String path) {
168 String base64 = BitmapUtils.imageToBase64(path); 168 String base64 = BitmapUtils.imageToBase64(path);
169 Log.i("figLoaction", path); 169 Log.i("figLoaction", path);
170 NetWorks.cut(base64, new Observer<CutPicBean>() { 170 NetWorks.cut(base64, new Observer<CutPicBean>() {
171 @Override 171 @Override
172 public void onSubscribe(Disposable d) { 172 public void onSubscribe(Disposable d) {
173 173
174 } 174 }
175 175
176 @Override 176 @Override
177 public void onNext(CutPicBean cutPicBean) { 177 public void onNext(CutPicBean cutPicBean) {
178 if (cutPicBean != null) { 178 if (cutPicBean != null) {
179 if (cutPicBean.getDirection() != 0) { 179 if (cutPicBean.getDirection() != 0) {
180 rotatingImage(cutPicBean); 180 rotatingImage(cutPicBean);
181 } else { 181 } else {
182 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 182 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
183 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 183 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
184 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 184 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
185 figLoactions.add(cutLocation.getFig_location()); 185 figLoactions.add(cutLocation.getFig_location());
186 } 186 }
187 new Handler().postDelayed(new Runnable() { 187 new Handler().postDelayed(new Runnable() {
188 @Override 188 @Override
189 public void run() { 189 public void run() {
190 getRects(figLoactions); 190 getRects(figLoactions);
191 } 191 }
192 }, 1000); 192 }, 1000);
193 } else { 193 } else {
194 cancelLoadingDialog(); 194 cancelLoadingDialog();
195 } 195 }
196 } 196 }
197 } else { 197 } else {
198 loadFail("自动切题失败"); 198 loadFail("自动切题失败");
199 } 199 }
200 } 200 }
201 201
202 @Override 202 @Override
203 public void onError(Throwable e) { 203 public void onError(Throwable e) {
204 loadFail("自动切题失败"); 204 loadFail("自动切题失败");
205 } 205 }
206 206
207 @Override 207 @Override
208 public void onComplete() { 208 public void onComplete() {
209 209
210 } 210 }
211 }); 211 });
212 } 212 }
213 213
214 private void getRects(List<CutPicBean.FigLoaction> figLoactions) { 214 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
215 Log.i("figLoaction", new Gson().toJson(figLoactions)); 215 Log.i("figLoaction", new Gson().toJson(figLoactions));
216 int index = binding.viewPager.getCurrentItem(); 216 int index = binding.viewPager.getCurrentItem();
217 List<ImageBean.Cut> cuts = new ArrayList<>(); 217 List<ImageBean.Cut> cuts = new ArrayList<>();
218 for (CutPicBean.FigLoaction figLoaction : figLoactions) { 218 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
219 ImageBean.Cut cut = new ImageBean.Cut(); 219 ImageBean.Cut cut = new ImageBean.Cut();
220 cut.setRect(figLoaction); 220 cut.setRect(figLoaction);
221 cut.setSelect(false); 221 cut.setSelect(false);
222 cuts.add(cut); 222 cuts.add(cut);
223 } 223 }
224 list.get(index).setCuts(cuts); 224 list.get(index).setCuts(cuts);
225 imageAdapter.notifyItemChanged(index); 225 imageAdapter.notifyItemChanged(index);
226 cancelLoadingDialog(); 226 cancelLoadingDialog();
227 } 227 }
228 228
229 private void rotatingImage(CutPicBean cutPicBean) { 229 private void rotatingImage(CutPicBean cutPicBean) {
230 int index = binding.viewPager.getCurrentItem(); 230 int index = binding.viewPager.getCurrentItem();
231 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath()); 231 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
232 int angle = 0; 232 int angle = 0;
233 switch (cutPicBean.getDirection()) { 233 switch (cutPicBean.getDirection()) {
234 case 1: 234 case 1:
235 angle = 90; 235 angle = 90;
236 break; 236 break;
237 case 2: 237 case 2:
238 angle = 180; 238 angle = 180;
239 break; 239 break;
240 case 3: 240 case 3:
241 angle = 270; 241 angle = 270;
242 break; 242 break;
243 } 243 }
244 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 244 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
245 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 245 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
246 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 246 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
247 figLoactions.add(cutLocation.getFig_location()); 247 figLoactions.add(cutLocation.getFig_location());
248 } 248 }
249 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight()); 249 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
250 bitmap = CommonUtil.rotaingImageView(angle, bitmap); 250 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
251 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 251 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
252 CommonUtil.saveBitmapToUri(bitmap, filepath); 252 CommonUtil.saveBitmapToUri(bitmap, filepath);
253 list.get(index).setPath(filepath); 253 list.get(index).setPath(filepath);
254 imageAdapter.notifyItemChanged(index); 254 imageAdapter.notifyItemChanged(index);
255 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions; 255 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
256 new Handler().postDelayed(new Runnable() { 256 new Handler().postDelayed(new Runnable() {
257 @Override 257 @Override
258 public void run() { 258 public void run() {
259 getRects(finalFigLoactions); 259 getRects(finalFigLoactions);
260 } 260 }
261 }, 500); 261 }, 500);
262 } else { 262 } else {
263 cancelLoadingDialog(); 263 cancelLoadingDialog();
264 } 264 }
265 } 265 }
266 266
267 @Override 267 @Override
268 protected ActivityImageBinding getViewBinding() { 268 protected ActivityImageBinding getViewBinding() {
269 return ActivityImageBinding.inflate(getLayoutInflater()); 269 return ActivityImageBinding.inflate(getLayoutInflater());
270 } 270 }
271 271
272 @SuppressLint("SetTextI18n") 272 @SuppressLint("SetTextI18n")
273 public void refreshNum() { 273 public void refreshNum() {
274 int num = 0; 274 int num = 0;
275 for (ImageBean imageBean : list) { 275 for (ImageBean imageBean : list) {
276 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 276 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
277 for (ImageBean.Cut cut : imageBean.getCuts()) { 277 for (ImageBean.Cut cut : imageBean.getCuts()) {
278 if (cut.isSelect()) { 278 if (cut.isSelect()) {
279 num++; 279 num++;
280 } 280 }
281 } 281 }
282 } 282 }
283 } 283 }
284 String btnText = type == 0 ? "保存错题" : "录入题目"; 284 String btnText = type == 0 ? "保存错题" : "录入题目";
285 if (num > 0) { 285 if (num > 0) {
286 binding.tvSave.setEnabled(true); 286 binding.tvSave.setEnabled(true);
287 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5); 287 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
288 binding.tvSave.setText(btnText + "(" + num + ")"); 288 binding.tvSave.setText(btnText + "(" + num + ")");
289 } else { 289 } else {
290 binding.tvSave.setEnabled(false); 290 binding.tvSave.setEnabled(false);
291 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5); 291 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
292 binding.tvSave.setText(btnText); 292 binding.tvSave.setText(btnText);
293 } 293 }
294 } 294 }
295 295
296 @Override 296 @Override
297 public void onClick(View v) { 297 public void onClick(View v) {
298 switch (v.getId()) { 298 switch (v.getId()) {
299 case R.id.iv_back: 299 case R.id.iv_back:
300 back(); 300 back();
301 break; 301 break;
302 case R.id.rl_next: 302 case R.id.rl_next:
303 if (binding.viewPager.getCurrentItem() + 1 < list.size()) { 303 if (binding.viewPager.getCurrentItem() + 1 < list.size()) {
304 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1); 304 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
305 } 305 }
306 break; 306 break;
307 case R.id.rl_previous: 307 case R.id.rl_previous:
308 if (binding.viewPager.getCurrentItem() != 0) { 308 if (binding.viewPager.getCurrentItem() != 0) {
309 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1); 309 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
310 } 310 }
311 break; 311 break;
312 case R.id.ll_edit: 312 case R.id.ll_edit:
313 Intent intent = new Intent(context, ImageEditActivity.class); 313 Intent intent = new Intent(context, ImageEditActivity.class);
314 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 314 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
315 startActivityForResult(intent, 1001); 315 startActivityForResult(intent, 1001);
316 break; 316 break;
317 case R.id.tv_photo: 317 case R.id.tv_photo:
318 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 318 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
319 //确保有相机来处理Intent 319 //确保有相机来处理Intent
320 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 320 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
321 File photoFile = new File(filePath); 321 File photoFile = new File(filePath);
322 if (photoFile != null) { 322 if (photoFile != null) {
323 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 323 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
324 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 324 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
325 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 325 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
326 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 326 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
327 activity.startActivityForResult(takePictureIntent, 1002); 327 activity.startActivityForResult(takePictureIntent, 1002);
328 } 328 }
329 break; 329 break;
330 case R.id.tv_add: 330 case R.id.tv_add:
331 Intent intent1 = new Intent(context, ImageSelectActivity.class); 331 Intent intent1 = new Intent(context, ImageSelectActivity.class);
332 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 332 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
333 intent1.putExtra("source", list.get(binding.viewPager.getCurrentItem()).source);
333 startActivityForResult(intent1, 1001); 334 startActivityForResult(intent1, 1001);
334 break; 335 break;
335 case R.id.tv_save: 336 case R.id.tv_save:
336 List<TopicBean> topicBeans = new ArrayList<>(); 337 List<TopicBean> topicBeans = new ArrayList<>();
337 for (ImageBean imageBean : list) { 338 for (ImageBean imageBean : list) {
338 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 339 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
339 for (ImageBean.Cut cut : imageBean.getCuts()) { 340 for (ImageBean.Cut cut : imageBean.getCuts()) {
340 if (cut.isSelect()) { 341 if (cut.isSelect()) {
341 TopicBean bean = new TopicBean(); 342 TopicBean bean = new TopicBean();
342 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 343 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
343 BitmapUtils.saveBitmap(cut.getBitmap(), path); 344 BitmapUtils.saveBitmap(cut.getBitmap(), path);
344 bean.setPath(path); 345 bean.setPath(path);
345 topicBeans.add(bean); 346 topicBeans.add(bean);
346 } 347 }
347 } 348 }
348 } 349 }
349 } 350 }
350 save(topicBeans); 351 save(topicBeans);
351 break; 352 break;
352 } 353 }
353 } 354 }
354 355
355 private void save(List<TopicBean> topicBeans) { 356 private void save(List<TopicBean> topicBeans) {
356 if (type == 0) { 357 if (type == 0) {
357 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans); 358 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
358 dialog.show(); 359 dialog.show();
359 } else { 360 } else {
360 List<String> paths = new ArrayList<>(); 361 List<String> paths = new ArrayList<>();
361 for (TopicBean it: topicBeans) { 362 for (TopicBean it: topicBeans) {
362 paths.add(it.getPath()); 363 paths.add(it.getPath());
363 } 364 }
364 if (addHomeworkDialog == null) { 365 if (addHomeworkDialog == null) {
365 addHomeworkDialog = new AddHomeworkDialog(this); 366 addHomeworkDialog = new AddHomeworkDialog(this);
366 } 367 }
367 addHomeworkDialog.show(paths, student -> { 368 addHomeworkDialog.show(paths, student -> {
368 Intent intent = new Intent(context, AddSuccessActivity.class); 369 Intent intent = new Intent(context, AddSuccessActivity.class);
369 intent.putExtra("type", type); 370 intent.putExtra("type", type);
370 intent.putExtra("studentJson", new Gson().toJson(student)); 371 intent.putExtra("studentJson", new Gson().toJson(student));
371 startActivity(intent); 372 startActivity(intent);
372 finish(); 373 finish();
373 }); 374 });
374 } 375 }
375 } 376 }
376 377
377 @Override 378 @Override
378 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 379 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
379 super.onActivityResult(requestCode, resultCode, data); 380 super.onActivityResult(requestCode, resultCode, data);
380 if (requestCode == 1001) { 381 if (requestCode == 1001) {
381 if (resultCode == 1002) { 382 if (resultCode == 1002) {
382 if (list.size() > 1) { 383 if (list.size() > 1) {
383 list.remove(binding.viewPager.getCurrentItem()); 384 list.remove(binding.viewPager.getCurrentItem());
384 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem()); 385 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
385 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 386 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
386 refreshNum(); 387 refreshNum();
387 } else { 388 } else {
388 finish(); 389 finish();
389 } 390 }
390 } else if (resultCode == 1003) { 391 } else if (resultCode == 1003) {
391 int position = binding.viewPager.getCurrentItem(); 392 int position = binding.viewPager.getCurrentItem();
392 String src = list.get(position).source; 393 String src = list.get(position).source;
393 list.remove(position); 394 list.remove(position);
394 String path = data.getStringExtra("path"); 395 String path = data.getStringExtra("path");
395 ImageBean imageBean = new ImageBean(); 396 ImageBean imageBean = new ImageBean();
396 imageBean.setPath(path); 397 imageBean.setPath(path);
397 imageBean.source = src; 398 imageBean.source = src;
398 list.add(position, imageBean); 399 list.add(position, imageBean);
399 imageAdapter.notifyItemChanged(position); 400 imageAdapter.notifyItemChanged(position);
400 clearText(); 401 clearText();
401 refreshNum(); 402 refreshNum();
402 } else if (resultCode == 1004) { 403 } else if (resultCode == 1004) {
403 Rect rect = data.getParcelableExtra("cut"); 404 Rect rect = data.getParcelableExtra("cut");
404 if (rect != null) { 405 if (rect != null) {
405 int position = binding.viewPager.getCurrentItem(); 406 int position = binding.viewPager.getCurrentItem();
406 ImageBean.Cut cut = new ImageBean.Cut(); 407 ImageBean.Cut cut = new ImageBean.Cut();
407 cut.setRect1(rect); 408 cut.setRect1(rect);
408 cut.setSelect(false); 409 cut.setSelect(false);
409 if (list.get(position).getCuts() != null) { 410 if (list.get(position).getCuts() != null) {
410 list.get(position).getCuts().add(cut); 411 list.get(position).getCuts().add(cut);
411 } else { 412 } else {
412 List<ImageBean.Cut> cuts =new ArrayList<>(); 413 List<ImageBean.Cut> cuts =new ArrayList<>();
413 cuts.add(cut); 414 cuts.add(cut);
414 list.get(position).setCuts(cuts); 415 list.get(position).setCuts(cuts);
415 } 416 }
416 imageAdapter.notifyItemChanged(position); 417 imageAdapter.notifyItemChanged(position);
417 refreshNum(); 418 refreshNum();
418 } 419 }
419 } else if (resultCode == 1005) { 420 } else if (resultCode == 1005) {
420 int i = data.getIntExtra("position", 0); 421 int i = data.getIntExtra("position", 0);
421 int position = binding.viewPager.getCurrentItem(); 422 int position = binding.viewPager.getCurrentItem();
422 Rect rect = data.getParcelableExtra("cut"); 423 Rect rect = data.getParcelableExtra("cut");
423 if (rect != null) { 424 if (rect != null) {
424 ImageBean.Cut cut = new ImageBean.Cut(); 425 ImageBean.Cut cut = new ImageBean.Cut();
425 cut.setRect1(rect); 426 cut.setRect1(rect);
426 cut.setSelect(false); 427 cut.setSelect(false);
427 list.get(position).getCuts().remove(i); 428 list.get(position).getCuts().remove(i);
428 list.get(position).getCuts().add(i, cut); 429 list.get(position).getCuts().add(i, cut);
429 imageAdapter.notifyItemChanged(position); 430 imageAdapter.notifyItemChanged(position);
430 refreshNum(); 431 refreshNum();
431 } else { 432 } else {
432 list.get(position).getCuts().remove(i); 433 list.get(position).getCuts().remove(i);
433 imageAdapter.notifyItemChanged(position); 434 imageAdapter.notifyItemChanged(position);
434 refreshNum(); 435 refreshNum();
435 } 436 }
436 } 437 }
437 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 438 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
438 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 439 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
439 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 440 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
440 CommonUtil.saveBitmapToUri(b, path); 441 CommonUtil.saveBitmapToUri(b, path);
441 int position = binding.viewPager.getCurrentItem(); 442 int position = binding.viewPager.getCurrentItem();
442 list.remove(position); 443 list.remove(position);
443 ImageBean imageBean = new ImageBean(); 444 ImageBean imageBean = new ImageBean();
444 imageBean.setPath(path); 445 imageBean.setPath(path);
445 imageBean.source = path; 446 imageBean.source = path;
446 list.add(position, imageBean); 447 list.add(position, imageBean);
447 imageAdapter.notifyItemChanged(position); 448 imageAdapter.notifyItemChanged(position);
448 clearText(); 449 clearText();
449 refreshNum(); 450 refreshNum();
450 } 451 }
451 } 452 }
452 453
453 private void back() { 454 private void back() {
454 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() { 455 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
455 @Override 456 @Override
456 public void onConfirm(Dialog dialog) { 457 public void onConfirm(Dialog dialog) {
457 dialog.dismiss(); 458 dialog.dismiss();
458 finish(); 459 finish();
459 } 460 }
460 461
461 @Override 462 @Override
462 public void onCancel(Dialog dialog) { 463 public void onCancel(Dialog dialog) {
463 dialog.dismiss(); 464 dialog.dismiss();
464 } 465 }
465 }); 466 });
466 } 467 }
467 468
468 @Override 469 @Override
469 public boolean onKeyDown(int keyCode, KeyEvent event) { 470 public boolean onKeyDown(int keyCode, KeyEvent event) {
470 if (keyCode == KeyEvent.KEYCODE_BACK) { 471 if (keyCode == KeyEvent.KEYCODE_BACK) {
471 back(); 472 back();
472 return true; 473 return true;
473 } 474 }
474 return super.onKeyDown(keyCode, event); 475 return super.onKeyDown(keyCode, event);
475 } 476 }
476 } 477 }
477 478
app/src/main/java/com/hjx/parent/ImageSelectActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.app.Dialog; 3 import android.app.Dialog;
4 import android.content.Intent; 4 import android.content.Intent;
5 import android.graphics.Bitmap; 5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory; 6 import android.graphics.BitmapFactory;
7 import android.graphics.Canvas; 7 import android.graphics.Canvas;
8 import android.graphics.Paint; 8 import android.graphics.Paint;
9 import android.graphics.Rect; 9 import android.graphics.Rect;
10 import android.os.Bundle; 10 import android.os.Bundle;
11 import android.os.SystemClock; 11 import android.os.SystemClock;
12 import android.util.Log; 12 import android.util.Log;
13 import android.view.KeyEvent; 13 import android.view.KeyEvent;
14 import android.view.MotionEvent; 14 import android.view.MotionEvent;
15 import android.view.View; 15 import android.view.View;
16 import android.widget.RelativeLayout; 16 import android.widget.RelativeLayout;
17 17
18 import com.hjx.parent.databinding.ActivityImageSelectBinding; 18 import com.hjx.parent.databinding.ActivityImageSelectBinding;
19 import com.hjx.parent.dialog.PhotoViewDialog;
19 import com.hjx.parent.dialog.TipDialog; 20 import com.hjx.parent.dialog.TipDialog;
20 import com.prws.common.bean.CutPicBean; 21 import com.prws.common.bean.CutPicBean;
21 import com.prws.common.bean.ImageBean; 22 import com.prws.common.bean.ImageBean;
22 import com.prws.common.utils.BitmapUtils; 23 import com.prws.common.utils.BitmapUtils;
23 import com.prws.common.utils.CommonUtil; 24 import com.prws.common.utils.CommonUtil;
24 import com.prws.common.widget.MarkSizeView; 25 import com.prws.common.widget.MarkSizeView;
25 26
26 public class ImageSelectActivity extends BaseActivity<ActivityImageSelectBinding> { 27 public class ImageSelectActivity extends BaseActivity<ActivityImageSelectBinding> {
27 private Bitmap bitmap; 28 private Bitmap bitmap;
28 Rect rect; 29 Rect rect;
29 private double widthFold, heightFold; 30 private double widthFold, heightFold;
30 private Bitmap backGroundBitmap; 31 private Bitmap backGroundBitmap;
31 private int bitmapWidth, bitmapHeight; 32 private int bitmapWidth, bitmapHeight;
32 private Rect select; 33 private Rect select;
33 private boolean isSelect = false; 34 private boolean isSelect = false;
34 35
35 @Override 36 @Override
36 public void initView(Bundle savedInstanceState) { 37 public void initView(Bundle savedInstanceState) {
37 String path = getIntent().getStringExtra("path"); 38 String path = getIntent().getStringExtra("path");
38 bitmap = BitmapFactory.decodeFile(path); 39 bitmap = BitmapFactory.decodeFile(path);
39 showImage(); 40 showImage();
40 binding.markView.setmOnClickListener(new MarkSizeView.onClickListener() { 41 binding.markView.setmOnClickListener(new MarkSizeView.onClickListener() {
41 @Override 42 @Override
42 public void onConfirm(Rect markedArea) { 43 public void onConfirm(Rect markedArea) {
43 if (isSelect) { 44 if (isSelect) {
44 binding.markView.setBackGroundBitmap(backGroundBitmap); 45 binding.markView.setBackGroundBitmap(backGroundBitmap);
45 isSelect = false; 46 isSelect = false;
46 } 47 }
47 int markSizeViewWidth = binding.markView.getWidth(); 48 int markSizeViewWidth = binding.markView.getWidth();
48 int markSizeHeight = binding.markView.getHeight(); 49 int markSizeHeight = binding.markView.getHeight();
49 backGroundBitmap = binding.markView.getBackGroundBitmap(); 50 backGroundBitmap = binding.markView.getBackGroundBitmap();
50 bitmapWidth = backGroundBitmap.getWidth(); 51 bitmapWidth = backGroundBitmap.getWidth();
51 bitmapHeight = backGroundBitmap.getHeight(); 52 bitmapHeight = backGroundBitmap.getHeight();
52 widthFold = CommonUtil.div(bitmapWidth, markSizeViewWidth, 2); 53 widthFold = CommonUtil.div(bitmapWidth, markSizeViewWidth, 2);
53 heightFold = CommonUtil.div(bitmapHeight, markSizeHeight, 2); 54 heightFold = CommonUtil.div(bitmapHeight, markSizeHeight, 2);
54 Log.d(toString(), markedArea.toString()); 55 Log.d(toString(), markedArea.toString());
55 drawRectangles(markedArea); 56 drawRectangles(markedArea);
56 binding.markView.reset(); 57 binding.markView.reset();
57 } 58 }
58 59
59 @Override 60 @Override
60 public void onCancel() { 61 public void onCancel() {
61 rect = null; 62 rect = null;
62 } 63 }
63 64
64 @Override 65 @Override
65 public void onTouch() { 66 public void onTouch() {
66 67
67 } 68 }
68 }); 69 });
69 binding.tvSave.setOnClickListener(new View.OnClickListener() { 70 binding.tvSave.setOnClickListener(new View.OnClickListener() {
70 @Override 71 @Override
71 public void onClick(View v) { 72 public void onClick(View v) {
72 if (rect != null) { 73 if (rect != null) {
73 if (select == null) { 74 if (select == null) {
74 Intent intent = new Intent(); 75 Intent intent = new Intent();
75 intent.putExtra("cut", rect); 76 intent.putExtra("cut", rect);
76 setResult(1004, intent); 77 setResult(1004, intent);
77 finish(); 78 finish();
78 } else { 79 } else {
79 Intent intent = new Intent(); 80 Intent intent = new Intent();
80 intent.putExtra("cut", rect); 81 intent.putExtra("cut", rect);
81 intent.putExtra("position", getIntent().getIntExtra("position", 0)); 82 intent.putExtra("position", getIntent().getIntExtra("position", 0));
82 setResult(1005, intent); 83 setResult(1005, intent);
83 finish(); 84 finish();
84 } 85 }
85 } else { 86 } else {
86 showToast("未选择框题区域"); 87 showToast("未选择框题区域");
87 } 88 }
88 } 89 }
89 }); 90 });
90 binding.llDelete.setOnClickListener(new View.OnClickListener() { 91 binding.llDelete.setOnClickListener(new View.OnClickListener() {
91 @Override 92 @Override
92 public void onClick(View v) { 93 public void onClick(View v) {
93 if (select == null) { 94 if (select == null) {
94 finish(); 95 finish();
95 } else { 96 } else {
96 rect = null; 97 rect = null;
97 Intent intent = new Intent(); 98 Intent intent = new Intent();
98 intent.putExtra("cut", rect); 99 intent.putExtra("cut", rect);
99 intent.putExtra("position", getIntent().getIntExtra("position", 0)); 100 intent.putExtra("position", getIntent().getIntExtra("position", 0));
100 setResult(1005, intent); 101 setResult(1005, intent);
101 finish(); 102 finish();
102 } 103 }
103 } 104 }
104 }); 105 });
105 binding.ivBack.setOnClickListener(new View.OnClickListener() { 106 binding.ivBack.setOnClickListener(new View.OnClickListener() {
106 @Override 107 @Override
107 public void onClick(View v) { 108 public void onClick(View v) {
108 back(); 109 back();
109 } 110 }
110 }); 111 });
112
113 String source = getIntent().getStringExtra("source");
114 binding.btnShowSource.setOnClickListener(v -> {
115 new PhotoViewDialog(this).show(source);
116 });
111 } 117 }
112 118
113 private void back() { 119 private void back() {
114 showTipDialog("温馨提示", "是否确认放弃当前的编辑?", "取消", "确定", new TipDialog.TipDialogInterface() { 120 showTipDialog("温馨提示", "是否确认放弃当前的编辑?", "取消", "确定", new TipDialog.TipDialogInterface() {
115 @Override 121 @Override
116 public void onConfirm(Dialog dialog) { 122 public void onConfirm(Dialog dialog) {
117 dialog.dismiss(); 123 dialog.dismiss();
118 finish(); 124 finish();
119 } 125 }
120 126
121 @Override 127 @Override
122 public void onCancel(Dialog dialog) { 128 public void onCancel(Dialog dialog) {
123 dialog.dismiss(); 129 dialog.dismiss();
124 } 130 }
125 }); 131 });
126 } 132 }
127 133
128 private void simulateClick(int x1, int x2, int y1, int y2) { 134 private void simulateClick(int x1, int x2, int y1, int y2) {
129 long downTime = SystemClock.uptimeMillis(); 135 long downTime = SystemClock.uptimeMillis();
130 final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x1, y1, 0); 136 final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x1, y1, 0);
131 downTime += 1000; 137 downTime += 1000;
132 final MotionEvent moveEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_MOVE, x2, y2, 0); 138 final MotionEvent moveEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_MOVE, x2, y2, 0);
133 final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x2, y2, 0); 139 final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x2, y2, 0);
134 binding.markView.onTouchEvent(downEvent); 140 binding.markView.onTouchEvent(downEvent);
135 binding.markView.onTouchEvent(moveEvent); 141 binding.markView.onTouchEvent(moveEvent);
136 binding.markView.onTouchEvent(upEvent); 142 binding.markView.onTouchEvent(upEvent);
137 downEvent.recycle(); 143 downEvent.recycle();
138 moveEvent.recycle(); 144 moveEvent.recycle();
139 upEvent.recycle(); 145 upEvent.recycle();
140 } 146 }
141 147
142 private void drawRectangles(Rect ints) { 148 private void drawRectangles(Rect ints) {
143 isSelect = true; 149 isSelect = true;
144 rect = new Rect(ints.left, ints.top, ints.right, ints.bottom); 150 rect = new Rect(ints.left, ints.top, ints.right, ints.bottom);
145 Log.d(toString(), ints.toString()); 151 Log.d(toString(), ints.toString());
146 Rect rect = new Rect(CommonUtil.mulForInt(ints.left, widthFold), CommonUtil.mulForInt(ints.top, heightFold), CommonUtil.mulForInt(ints.right, widthFold), CommonUtil.mulForInt(ints.bottom, heightFold)); 152 Rect rect = new Rect(CommonUtil.mulForInt(ints.left, widthFold), CommonUtil.mulForInt(ints.top, heightFold), CommonUtil.mulForInt(ints.right, widthFold), CommonUtil.mulForInt(ints.bottom, heightFold));
147 // Log.d(toString(),rect.toString()); 153 // Log.d(toString(),rect.toString());
148 Bitmap mutableBitmap = backGroundBitmap.copy(Bitmap.Config.ARGB_8888, true); 154 Bitmap mutableBitmap = backGroundBitmap.copy(Bitmap.Config.ARGB_8888, true);
149 Canvas canvas = new Canvas(mutableBitmap); 155 Canvas canvas = new Canvas(mutableBitmap);
150 //画矩形框 156 //画矩形框
151 Paint paint = new Paint(); 157 Paint paint = new Paint();
152 paint.setAntiAlias(true); 158 paint.setAntiAlias(true);
153 paint.setStyle(Paint.Style.FILL);//填充 159 paint.setStyle(Paint.Style.FILL);//填充
154 paint.setStrokeWidth(CommonUtil.dpToPx(this, 1)); //线的宽度 160 paint.setStrokeWidth(CommonUtil.dpToPx(this, 1)); //线的宽度
155 paint.setColor(getColor(R.color.select_fill)); 161 paint.setColor(getColor(R.color.select_fill));
156 canvas.drawRect(rect, paint); 162 canvas.drawRect(rect, paint);
157 paint.setStyle(Paint.Style.STROKE);//不填充 163 paint.setStyle(Paint.Style.STROKE);//不填充
158 paint.setColor(getColor(R.color.select_border)); 164 paint.setColor(getColor(R.color.select_border));
159 canvas.drawRect(rect, paint); 165 canvas.drawRect(rect, paint);
160 binding.markView.setBackGroundBitmap(mutableBitmap); 166 binding.markView.setBackGroundBitmap(mutableBitmap);
161 } 167 }
162 168
163 private void showImage() { 169 private void showImage() {
164 float imageHeight = bitmap.getHeight(); 170 float imageHeight = bitmap.getHeight();
165 float imageWidth = bitmap.getWidth(); 171 float imageWidth = bitmap.getWidth();
166 float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 250); 172 float viewHeight = CommonUtil.getScreenHeight(context) - CommonUtil.dpToPx(context, 250);
167 float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60); 173 float viewWidth = CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 60);
168 binding.markView.post(new Runnable() { 174 binding.markView.post(new Runnable() {
169 @Override 175 @Override
170 public void run() { 176 public void run() {
171 binding.markView.reset(); 177 binding.markView.reset();
172 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(binding.markView.getLayoutParams()); 178 RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(binding.markView.getLayoutParams());
173 if (imageHeight / imageWidth > viewHeight / viewWidth) { 179 if (imageHeight / imageWidth > viewHeight / viewWidth) {
174 if (viewHeight > imageHeight) { 180 if (viewHeight > imageHeight) {
175 layoutParams.height = (int) imageHeight; 181 layoutParams.height = (int) imageHeight;
176 layoutParams.width = (int) imageWidth; 182 layoutParams.width = (int) imageWidth;
177 } else { 183 } else {
178 layoutParams.height = (int) viewHeight; 184 layoutParams.height = (int) viewHeight;
179 layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight); 185 layoutParams.width = (int) ((float) (imageWidth / imageHeight) * viewHeight);
180 } 186 }
181 } else { 187 } else {
182 if (viewWidth > imageWidth) { 188 if (viewWidth > imageWidth) {
183 layoutParams.height = (int) imageHeight; 189 layoutParams.height = (int) imageHeight;
184 layoutParams.width = (int) imageWidth; 190 layoutParams.width = (int) imageWidth;
185 } else { 191 } else {
186 layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth); 192 layoutParams.height = (int) ((float) (imageHeight / imageWidth) * viewWidth);
187 layoutParams.width = (int) viewWidth; 193 layoutParams.width = (int) viewWidth;
188 } 194 }
189 } 195 }
190 layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); 196 layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
191 binding.markView.setLayoutParams(layoutParams); 197 binding.markView.setLayoutParams(layoutParams);
192 binding.markView.setBackGroundBitmap(bitmap); 198 binding.markView.setBackGroundBitmap(bitmap);
193 binding.markView.reset(); 199 binding.markView.reset();
194 select = getIntent().getParcelableExtra("rect"); 200 select = getIntent().getParcelableExtra("rect");
195 if (select != null) { 201 if (select != null) {
196 simulateClick(select.left, select.right, select.top, select.bottom); 202 simulateClick(select.left, select.right, select.top, select.bottom);
197 } 203 }
198 } 204 }
199 }); 205 });
200 } 206 }
201 207
202 @Override 208 @Override
203 protected void onDestroy() { 209 protected void onDestroy() {
204 if (backGroundBitmap != null) { 210 if (backGroundBitmap != null) {
205 backGroundBitmap.recycle(); 211 backGroundBitmap.recycle();
206 backGroundBitmap = null; 212 backGroundBitmap = null;
207 } 213 }
208 if (bitmap != null) { 214 if (bitmap != null) {
209 bitmap.recycle(); 215 bitmap.recycle();
210 bitmap = null; 216 bitmap = null;
211 } 217 }
212 super.onDestroy(); 218 super.onDestroy();
213 } 219 }
214 220
215 @Override 221 @Override
216 public boolean onKeyDown(int keyCode, KeyEvent event) { 222 public boolean onKeyDown(int keyCode, KeyEvent event) {
217 if (keyCode == KeyEvent.KEYCODE_BACK) { 223 if (keyCode == KeyEvent.KEYCODE_BACK) {
218 back(); 224 back();
219 return true; 225 return true;
220 } 226 }
221 return super.onKeyDown(keyCode, event); 227 return super.onKeyDown(keyCode, event);
222 } 228 }
223 229
224 @Override 230 @Override
225 protected ActivityImageSelectBinding getViewBinding() { 231 protected ActivityImageSelectBinding getViewBinding() {
226 return ActivityImageSelectBinding.inflate(getLayoutInflater()); 232 return ActivityImageSelectBinding.inflate(getLayoutInflater());
227 } 233 }
228 } 234 }
229 235
app/src/main/res/layout/activity_image_select.xml
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools" 2 xmlns:tools="http://schemas.android.com/tools"
3 xmlns:xxx="http://schemas.android.com/apk/res-auto" 3 xmlns:xxx="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent" 4 android:layout_width="match_parent"
5 android:layout_height="match_parent" 5 android:layout_height="match_parent"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 tools:ignore="MissingDefaultResource"> 7 tools:ignore="MissingDefaultResource">
8 8
9 <RelativeLayout 9 <RelativeLayout
10 android:layout_width="match_parent" 10 android:layout_width="match_parent"
11 android:layout_height="40dp" 11 android:layout_height="40dp"
12 android:background="@color/white"> 12 android:background="@color/white">
13 13
14 <TextView 14 <TextView
15 android:id="@+id/tv_title" 15 android:id="@+id/tv_title"
16 android:layout_width="wrap_content" 16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content" 17 android:layout_height="wrap_content"
18 android:layout_centerInParent="true" 18 android:layout_centerInParent="true"
19 android:text="手动框选" 19 android:text="手动框选"
20 android:textColor="#333333" 20 android:textColor="#333333"
21 android:textSize="18sp" /> 21 android:textSize="18sp" />
22 22
23 <ImageView 23 <ImageView
24 android:id="@+id/iv_back" 24 android:id="@+id/iv_back"
25 android:layout_width="30dp" 25 android:layout_width="30dp"
26 android:layout_height="36dp" 26 android:layout_height="36dp"
27 android:layout_centerVertical="true" 27 android:layout_centerVertical="true"
28 android:layout_marginLeft="5dp" 28 android:layout_marginLeft="5dp"
29 android:padding="10dp" 29 android:padding="10dp"
30 android:src="@mipmap/icon_back" /> 30 android:src="@mipmap/icon_back" />
31
32 <TextView
33 android:id="@+id/btnShowSource"
34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content"
36 android:layout_alignParentRight="true"
37 android:layout_centerVertical="true"
38 android:layout_marginRight="15dp"
39 android:text="查看原图"
40 android:textColor="#333333"
41 android:textSize="14sp" />
31 </RelativeLayout> 42 </RelativeLayout>
32 43
33 <RelativeLayout 44 <RelativeLayout
34 android:layout_width="match_parent" 45 android:layout_width="match_parent"
35 android:layout_height="match_parent" 46 android:layout_height="match_parent"
36 android:background="@color/white"> 47 android:background="@color/white">
37 48
38 <RelativeLayout 49 <RelativeLayout
39 android:layout_width="match_parent" 50 android:layout_width="match_parent"
40 android:layout_height="match_parent" 51 android:layout_height="match_parent"
41 android:layout_above="@+id/rl_bottom" 52 android:layout_above="@+id/rl_bottom"
42 android:layout_marginLeft="15dp" 53 android:layout_marginLeft="15dp"
43 android:layout_marginTop="35dp" 54 android:layout_marginTop="35dp"
44 android:layout_marginRight="15dp" 55 android:layout_marginRight="15dp"
45 android:layout_marginBottom="45dp"> 56 android:layout_marginBottom="45dp">
46 57
47 <com.prws.common.widget.MarkSizeView 58 <com.prws.common.widget.MarkSizeView
48 android:id="@+id/mark_view" 59 android:id="@+id/mark_view"
49 android:layout_width="wrap_content" 60 android:layout_width="wrap_content"
50 android:layout_height="wrap_content" 61 android:layout_height="wrap_content"
51 android:layout_centerInParent="true" 62 android:layout_centerInParent="true"
52 xxx:markedColor="@color/select_fill" 63 xxx:markedColor="@color/select_fill"
53 xxx:strokeWidth="1dp" 64 xxx:strokeWidth="1dp"
54 xxx:strokesColor="@color/select_border" 65 xxx:strokesColor="@color/select_border"
55 xxx:vertexColor="@color/select_border" 66 xxx:vertexColor="@color/select_border"
56 xxx:vertexWidth="12dp" /> 67 xxx:vertexWidth="12dp" />
57 </RelativeLayout> 68 </RelativeLayout>
58 69
59 <RelativeLayout 70 <RelativeLayout
60 android:id="@+id/rl_bottom" 71 android:id="@+id/rl_bottom"
61 android:layout_width="match_parent" 72 android:layout_width="match_parent"
62 android:layout_height="70dp" 73 android:layout_height="70dp"
63 android:layout_alignParentBottom="true" 74 android:layout_alignParentBottom="true"
64 android:background="@color/white"> 75 android:background="@color/white">
65 76
66 77
67 <LinearLayout 78 <LinearLayout
68 android:id="@+id/ll_delete" 79 android:id="@+id/ll_delete"
69 android:layout_width="wrap_content" 80 android:layout_width="wrap_content"
70 android:layout_height="wrap_content" 81 android:layout_height="wrap_content"
71 android:layout_centerVertical="true" 82 android:layout_centerVertical="true"
72 android:layout_marginLeft="15dp" 83 android:layout_marginLeft="15dp"
73 android:orientation="vertical"> 84 android:orientation="vertical">
74 85
75 <ImageView 86 <ImageView
76 android:layout_width="25dp" 87 android:layout_width="25dp"
77 android:layout_height="25dp" 88 android:layout_height="25dp"
78 android:layout_gravity="center_horizontal" 89 android:layout_gravity="center_horizontal"
79 android:src="@mipmap/ic_delete" /> 90 android:src="@mipmap/ic_delete" />
80 91
81 <TextView 92 <TextView
82 android:layout_width="wrap_content" 93 android:layout_width="wrap_content"
83 android:layout_height="wrap_content" 94 android:layout_height="wrap_content"
84 android:layout_gravity="center_horizontal" 95 android:layout_gravity="center_horizontal"
85 android:layout_marginTop="5dp" 96 android:layout_marginTop="5dp"
86 android:text="删除" 97 android:text="删除"
87 android:textSize="11sp" /> 98 android:textSize="11sp" />
88 </LinearLayout> 99 </LinearLayout>
89 100
90 <TextView 101 <TextView
91 android:id="@+id/tv_save" 102 android:id="@+id/tv_save"
92 android:layout_width="280dp" 103 android:layout_width="280dp"
93 android:layout_height="40dp" 104 android:layout_height="40dp"
94 android:layout_alignParentRight="true" 105 android:layout_alignParentRight="true"
95 android:layout_centerVertical="true" 106 android:layout_centerVertical="true"
96 android:layout_marginRight="15dp" 107 android:layout_marginRight="15dp"
97 android:background="@drawable/bg_soild_blue_5" 108 android:background="@drawable/bg_soild_blue_5"
98 android:gravity="center" 109 android:gravity="center"
99 android:text="完成" 110 android:text="完成"
100 android:textColor="@color/white" 111 android:textColor="@color/white"
101 android:textSize="18sp" /> 112 android:textSize="18sp" />
102 </RelativeLayout> 113 </RelativeLayout>
103 </RelativeLayout> 114 </RelativeLayout>
104 </LinearLayout> 115 </LinearLayout>