Commit 4aaa2170c0147b23c7f4e8e166cc09cf3c762948

Authored by shixianjie
1 parent b185fa0a90
Exists in master

截图时隐藏部分ui

app/src/main/java/com/hjx/parent/HomeworkShareActivity.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.content.Intent; 4 import android.content.Intent;
5 import android.graphics.Bitmap; 5 import android.graphics.Bitmap;
6 import android.net.Uri; 6 import android.net.Uri;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.text.Html; 8 import android.text.Html;
9 import android.view.View; 9 import android.view.View;
10 import android.widget.ImageView; 10 import android.widget.ImageView;
11 import android.widget.LinearLayout; 11 import android.widget.LinearLayout;
12 import android.widget.TextView; 12 import android.widget.TextView;
13 13
14 import androidx.annotation.NonNull; 14 import androidx.annotation.NonNull;
15 15
16 import com.bumptech.glide.Glide; 16 import com.bumptech.glide.Glide;
17 import com.chad.library.adapter.base.BaseQuickAdapter; 17 import com.chad.library.adapter.base.BaseQuickAdapter;
18 import com.chad.library.adapter.base.BaseViewHolder; 18 import com.chad.library.adapter.base.BaseViewHolder;
19 import com.google.gson.Gson; 19 import com.google.gson.Gson;
20 import com.gyf.immersionbar.ImmersionBar; 20 import com.gyf.immersionbar.ImmersionBar;
21 import com.hjx.parent.databinding.ActivityHomeworkShareBinding; 21 import com.hjx.parent.databinding.ActivityHomeworkShareBinding;
22 import com.hjx.parent.dialog.PhotoViewDialog; 22 import com.hjx.parent.dialog.PhotoViewDialog;
23 import com.hjx.parent.rx.BaseRxActivity; 23 import com.hjx.parent.rx.BaseRxActivity;
24 import com.prws.common.bean.ResponseResult; 24 import com.prws.common.bean.ResponseResult;
25 import com.prws.common.bean.Student; 25 import com.prws.common.bean.Student;
26 import com.prws.common.bean.homework.HomeWork; 26 import com.prws.common.bean.homework.HomeWork;
27 import com.prws.common.bean.homework.HomeworkDetail; 27 import com.prws.common.bean.homework.HomeworkDetail;
28 import com.prws.common.bean.homework.KeyValue; 28 import com.prws.common.bean.homework.KeyValue;
29 import com.prws.common.net.NetWorks; 29 import com.prws.common.net.NetWorks;
30 import com.prws.common.utils.BitmapUtils; 30 import com.prws.common.utils.BitmapUtils;
31 import com.prws.common.utils.CommonUtil; 31 import com.prws.common.utils.CommonUtil;
32 import com.prws.common.utils.ContentUtil; 32 import com.prws.common.utils.ContentUtil;
33 33
34 import java.text.DecimalFormat; 34 import java.text.DecimalFormat;
35 import java.text.SimpleDateFormat; 35 import java.text.SimpleDateFormat;
36 import java.util.ArrayList; 36 import java.util.ArrayList;
37 import java.util.HashSet; 37 import java.util.HashSet;
38 import java.util.List; 38 import java.util.List;
39 import java.util.Locale; 39 import java.util.Locale;
40 import java.util.Set; 40 import java.util.Set;
41 41
42 import io.reactivex.Single; 42 import io.reactivex.Single;
43 import io.reactivex.android.schedulers.AndroidSchedulers; 43 import io.reactivex.android.schedulers.AndroidSchedulers;
44 import io.reactivex.schedulers.Schedulers; 44 import io.reactivex.schedulers.Schedulers;
45 45
46 public class HomeworkShareActivity extends BaseRxActivity<ActivityHomeworkShareBinding> { 46 public class HomeworkShareActivity extends BaseRxActivity<ActivityHomeworkShareBinding> {
47 private String id; 47 private String id;
48 48
49 String indent = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 49 String indent = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
50 50
51 private String title; 51 private String title;
52 private Student student; 52 private Student student;
53 private ErrorAdapter mAdapter = new ErrorAdapter(); 53 private ErrorAdapter mAdapter = new ErrorAdapter();
54 54
55 private Uri shareUri; 55 private Uri shareUri;
56 56
57 @SuppressLint("SetTextI18n") 57 @SuppressLint("SetTextI18n")
58 @Override 58 @Override
59 public void initView(Bundle savedInstanceState) { 59 public void initView(Bundle savedInstanceState) {
60 ImmersionBar.with(this).init(); 60 ImmersionBar.with(this).init();
61 binding.btnBack.setOnClickListener(v -> onBackPressed()); 61 binding.btnBack.setOnClickListener(v -> onBackPressed());
62 binding.rvWrong.setAdapter(mAdapter); 62 binding.rvWrong.setAdapter(mAdapter);
63 mAdapter.setEmptyView(R.layout.empty_statistical_no_error, binding.rvWrong); 63 mAdapter.setEmptyView(R.layout.empty_statistical_no_error, binding.rvWrong);
64 64
65 id = getIntent().getStringExtra("id"); 65 id = getIntent().getStringExtra("id");
66 title = getIntent().getStringExtra("name"); 66 title = getIntent().getStringExtra("name");
67 binding.tvTitle.setText(title); 67 binding.tvTitle.setText(title);
68 student = (Student) getIntent().getSerializableExtra("student"); 68 student = (Student) getIntent().getSerializableExtra("student");
69 assert student != null; 69 assert student != null;
70 binding.tvStuName.setText(student.stuName); 70 binding.tvStuName.setText(student.stuName);
71 Glide.with(this).load(student.photo).centerCrop().error(R.mipmap.ic_avatar_male).into(binding.ivAvatar); 71 Glide.with(this).load(student.photo).centerCrop().error(R.mipmap.ic_avatar_male).into(binding.ivAvatar);
72 binding.tvGrade.setText(getIntent().getStringExtra("grade")); 72 binding.tvGrade.setText(getIntent().getStringExtra("grade"));
73 binding.tvSubject.setText(getIntent().getStringExtra("subject")); 73 binding.tvSubject.setText(getIntent().getStringExtra("subject"));
74 74
75 binding.btnShare.setOnClickListener(v -> { 75 binding.btnShare.setOnClickListener(v -> {
76 if (shareUri == null) shareUri = saveBitmap(); 76 if (shareUri == null) shareUri = saveBitmap();
77 if (shareUri != null) { 77 if (shareUri != null) {
78 Intent shareIntent = new Intent(Intent.ACTION_SEND); 78 Intent shareIntent = new Intent(Intent.ACTION_SEND);
79 shareIntent.setType("image/jpeg"); 79 shareIntent.setType("image/jpeg");
80 shareIntent.putExtra(Intent.EXTRA_STREAM, shareUri); 80 shareIntent.putExtra(Intent.EXTRA_STREAM, shareUri);
81 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 81 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
82 82
83 startActivity(shareIntent); 83 startActivity(shareIntent);
84 } 84 }
85 }); 85 });
86 86
87 loadHomework(); 87 loadHomework();
88 } 88 }
89 89
90 @SuppressLint("CheckResult") 90 @SuppressLint("CheckResult")
91 private void loadHomework() { 91 private void loadHomework() {
92 NetWorks.service_url.getHomeworkCompleteDetail(NetWorks.getHeader(), student.stuId, id, true) 92 NetWorks.service_url.getHomeworkCompleteDetail(NetWorks.getHeader(), student.stuId, id, true)
93 .compose(transformSingle()) 93 .compose(transformSingle())
94 .map(ResponseResult::getData) 94 .map(ResponseResult::getData)
95 .map(data -> { 95 .map(data -> {
96 if (data.getHomeworkList() == null) return data; 96 if (data.getHomeworkList() == null) return data;
97 for (HomeWork homeWork: data.getHomeworkList()){ 97 for (HomeWork homeWork: data.getHomeworkList()){
98 homeWork.formatPoints(new Gson()); 98 homeWork.formatPoints(new Gson());
99 } 99 }
100 return data; 100 return data;
101 }) 101 })
102 .subscribe((data, th) -> { 102 .subscribe((data, th) -> {
103 if (th != null) th.printStackTrace(); 103 if (th != null) th.printStackTrace();
104 if (data != null) showHomework(data); 104 if (data != null) showHomework(data);
105 }); 105 });
106 } 106 }
107 @SuppressLint({"SetTextI18n", "DefaultLocale"}) 107 @SuppressLint({"SetTextI18n", "DefaultLocale"})
108 private void showHomework(HomeworkDetail detail) { 108 private void showHomework(HomeworkDetail detail) {
109 SimpleDateFormat format = new SimpleDateFormat("yyyy.M.d", Locale.CHINA); 109 SimpleDateFormat format = new SimpleDateFormat("yyyy.M.d", Locale.CHINA);
110 binding.tvDate.setText(format.format(detail.getDate())); 110 binding.tvDate.setText(format.format(detail.getDate()));
111 binding.flComment.setVisibility(detail.getComment() == null || detail.getComment().isEmpty() ? View.INVISIBLE : View.VISIBLE); 111 binding.flComment.setVisibility(detail.getComment() == null || detail.getComment().isEmpty() ? View.INVISIBLE : View.VISIBLE);
112 binding.tvComment.setText(ifEmpty(detail.getComment(), "-")); 112 binding.tvComment.setText(ifEmpty(detail.getComment(), "-"));
113 binding.tvRating.setText("-"); 113 binding.tvRating.setText("-");
114 114
115 String temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好;答错题目有 %s 道,错题涵盖的知识点主要有%s,这部分还要再加强学习。错题老师已经帮你收录到错题本中,要记得复习整理错题,及时消灭薄弱知识点。"; 115 String temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好;答错题目有 %s 道,错题涵盖的知识点主要有%s,这部分还要再加强学习。错题老师已经帮你收录到错题本中,要记得复习整理错题,及时消灭薄弱知识点。";
116 List<HomeWork> errorList = new ArrayList<>(); 116 List<HomeWork> errorList = new ArrayList<>();
117 if (detail.getHomeworkList() != null && detail.getHomeworkList().size() != 0) { 117 if (detail.getHomeworkList() != null && detail.getHomeworkList().size() != 0) {
118 int total = detail.getHomeworkList().size(); 118 int total = detail.getHomeworkList().size();
119 int correctNum = 0; 119 int correctNum = 0;
120 Set<KeyValue> correctSet = new HashSet<>(); 120 Set<KeyValue> correctSet = new HashSet<>();
121 Set<KeyValue> errorSet = new HashSet<>(); 121 Set<KeyValue> errorSet = new HashSet<>();
122 for (HomeWork homeWork: detail.getHomeworkList()) { 122 for (HomeWork homeWork: detail.getHomeworkList()) {
123 if (homeWork.correction == 0) { 123 if (homeWork.correction == 0) {
124 correctNum ++; 124 correctNum ++;
125 correctSet.addAll(homeWork.pointsObj); 125 correctSet.addAll(homeWork.pointsObj);
126 } else { 126 } else {
127 errorList.add(homeWork); 127 errorList.add(homeWork);
128 errorSet.addAll(homeWork.pointsObj); 128 errorSet.addAll(homeWork.pointsObj);
129 } 129 }
130 } 130 }
131 StringBuilder correctPoint = new StringBuilder(); 131 StringBuilder correctPoint = new StringBuilder();
132 StringBuilder errorPoint = new StringBuilder(); 132 StringBuilder errorPoint = new StringBuilder();
133 for (KeyValue point: correctSet) { 133 for (KeyValue point: correctSet) {
134 correctPoint.append("、").append(point.Value); 134 correctPoint.append("、").append(point.Value);
135 } 135 }
136 for (KeyValue point: errorSet) { 136 for (KeyValue point: errorSet) {
137 errorPoint.append("、").append(point.Value); 137 errorPoint.append("、").append(point.Value);
138 } 138 }
139 float rate = 100f * correctNum / total; 139 float rate = 100f * correctNum / total;
140 int errorNum = total - correctNum; 140 int errorNum = total - correctNum;
141 binding.tvPercent.setText(new DecimalFormat("0").format(rate)); 141 binding.tvPercent.setText(new DecimalFormat("0").format(rate));
142 binding.tvCorrect.setText(String.valueOf(correctNum)); 142 binding.tvCorrect.setText(String.valueOf(correctNum));
143 binding.tvWrong.setText(String.valueOf(errorNum)); 143 binding.tvWrong.setText(String.valueOf(errorNum));
144 144
145 String correct = "-", error = "-"; 145 String correct = "-", error = "-";
146 if (correctPoint.length() != 0) correct = correctPoint.substring(1); 146 if (correctPoint.length() != 0) correct = correctPoint.substring(1);
147 if (errorPoint.length() != 0) error = errorPoint.substring(1); 147 if (errorPoint.length() != 0) error = errorPoint.substring(1);
148 if (errorNum == 0) { 148 if (errorNum == 0) {
149 temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好。"; 149 temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好。";
150 String s = String.format(temp, 150 String s = String.format(temp,
151 fromColor(String.valueOf(correctNum), "#489afa"), 151 fromColor(String.valueOf(correctNum), "#489afa"),
152 fromColor(correct, "#489afa") 152 fromColor(correct, "#489afa")
153 ); 153 );
154 binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT)); 154 binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT));
155 } else { 155 } else {
156 String s = String.format(temp, 156 String s = String.format(temp,
157 fromColor(String.valueOf(correctNum), "#489afa"), 157 fromColor(String.valueOf(correctNum), "#489afa"),
158 fromColor(correct, "#489afa"), 158 fromColor(correct, "#489afa"),
159 fromColor(String.valueOf(errorNum), "#ff4134"), 159 fromColor(String.valueOf(errorNum), "#ff4134"),
160 fromColor(error, "#ff4134") 160 fromColor(error, "#ff4134")
161 ); 161 );
162 binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT)); 162 binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT));
163 } 163 }
164 } 164 }
165 165
166 mAdapter.setNewData(errorList); 166 mAdapter.setNewData(errorList);
167 } 167 }
168 168
169 private String fromColor(String str, String color) { 169 private String fromColor(String str, String color) {
170 return String.format("<font color='%s'>%s</font>", color, str); 170 return String.format("<font color='%s'>%s</font>", color, str);
171 } 171 }
172 172
173 @Override 173 @Override
174 protected ActivityHomeworkShareBinding getViewBinding() { 174 protected ActivityHomeworkShareBinding getViewBinding() {
175 return ActivityHomeworkShareBinding.inflate(getLayoutInflater()); 175 return ActivityHomeworkShareBinding.inflate(getLayoutInflater());
176 } 176 }
177 177
178 private Uri saveBitmap() { 178 private Uri saveBitmap() {
179 try { 179 try {
180 // binding.toolbar.setVisibility(View.GONE); 180 binding.btnShare.setVisibility(View.GONE);
181 binding.btnBack.setVisibility(View.GONE);
181 Bitmap bitmap = BitmapUtils.shotView(binding.viewRoot); 182 Bitmap bitmap = BitmapUtils.shotView(binding.viewRoot);
182 // binding.toolbar.setVisibility(View.VISIBLE); 183 binding.btnShare.setVisibility(View.VISIBLE);
184 binding.btnBack.setVisibility(View.VISIBLE);
185
183 String fileName = student.stuName + "_" + title; 186 String fileName = student.stuName + "_" + title;
184 return ContentUtil.saveBitmapToGallery(this, bitmap, fileName); 187 return ContentUtil.saveBitmapToGallery(this, bitmap, fileName);
185 } catch (Exception e) { 188 } catch (Exception e) {
186 e.printStackTrace(); 189 e.printStackTrace();
187 } 190 }
188 return null; 191 return null;
189 } 192 }
190 193
191 private static String ifEmpty(String s, String placeholder) { 194 private static String ifEmpty(String s, String placeholder) {
192 if (s == null || s.isEmpty()) return placeholder; 195 if (s == null || s.isEmpty()) return placeholder;
193 return s; 196 return s;
194 } 197 }
195 198
196 public static class ErrorAdapter extends BaseQuickAdapter<HomeWork, BaseViewHolder> { 199 public static class ErrorAdapter extends BaseQuickAdapter<HomeWork, BaseViewHolder> {
197 200
198 public ErrorAdapter() { 201 public ErrorAdapter() {
199 super(R.layout.item_homework_error); 202 super(R.layout.item_homework_error);
200 } 203 }
201 204
202 @Override 205 @Override
203 protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { 206 protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) {
204 ImageView ivTopic = holder.getView(R.id.ivTopic); 207 ImageView ivTopic = holder.getView(R.id.ivTopic);
205 TextView tvPoints = holder.getView(R.id.tvPoints); 208 TextView tvPoints = holder.getView(R.id.tvPoints);
206 ImageView ivAnalyze = holder.getView(R.id.ivAnalyze); 209 ImageView ivAnalyze = holder.getView(R.id.ivAnalyze);
207 210
208 showImage(ivTopic, homeWork.url); 211 showImage(ivTopic, homeWork.url);
209 showImage(ivAnalyze, homeWork.analyseUrl); 212 showImage(ivAnalyze, homeWork.analyseUrl);
210 tvPoints.setText("-"); 213 tvPoints.setText("-");
211 if (homeWork.pointsObj == null || homeWork.pointsObj.isEmpty()) return; 214 if (homeWork.pointsObj == null || homeWork.pointsObj.isEmpty()) return;
212 StringBuilder builder = new StringBuilder(); 215 StringBuilder builder = new StringBuilder();
213 for (KeyValue pair: homeWork.pointsObj) { 216 for (KeyValue pair: homeWork.pointsObj) {
214 builder.append(pair.Value).append("\n"); 217 builder.append(pair.Value).append("\n");
215 } 218 }
216 tvPoints.setText(ifEmpty(builder.toString().trim(), "-")); 219 tvPoints.setText(ifEmpty(builder.toString().trim(), "-"));
217 } 220 }
218 221
219 @SuppressLint("CheckResult") 222 @SuppressLint("CheckResult")
220 private void showImage(ImageView view, String url) { 223 private void showImage(ImageView view, String url) {
221 view.setVisibility(View.GONE); 224 view.setVisibility(View.GONE);
222 view.setImageBitmap(null); 225 view.setImageBitmap(null);
223 if (url == null) { 226 if (url == null) {
224 return; 227 return;
225 } 228 }
226 view.setOnClickListener(v -> { 229 view.setOnClickListener(v -> {
227 new PhotoViewDialog(mContext).show(url); 230 new PhotoViewDialog(mContext).show(url);
228 }); 231 });
229 Single.just(url) 232 Single.just(url)
230 .subscribeOn(Schedulers.io()) 233 .subscribeOn(Schedulers.io())
231 .map(u -> Glide.with(mContext).asBitmap().load(url).submit().get()) 234 .map(u -> Glide.with(mContext).asBitmap().load(url).submit().get())
232 .observeOn(AndroidSchedulers.mainThread()) 235 .observeOn(AndroidSchedulers.mainThread())
233 .subscribe((bitmap, th) -> { 236 .subscribe((bitmap, th) -> {
234 if (bitmap == null) return; 237 if (bitmap == null) return;
235 238
236 float imageHeight = bitmap.getHeight(); 239 float imageHeight = bitmap.getHeight();
237 float imageWidth = bitmap.getWidth(); 240 float imageWidth = bitmap.getWidth();
238 int viewHeight = (int) (CommonUtil.getScreenHeight(mContext) * 0.75f); 241 int viewHeight = (int) (CommonUtil.getScreenHeight(mContext) * 0.75f);
239 int viewWidth = (int) (CommonUtil.getScreenWidth(mContext) * 0.75f); 242 int viewWidth = (int) (CommonUtil.getScreenWidth(mContext) * 0.75f);
240 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(view.getLayoutParams()); 243 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(view.getLayoutParams());
241 if (imageHeight > imageWidth) { 244 if (imageHeight > imageWidth) {
242 if (viewHeight > imageHeight) { 245 if (viewHeight > imageHeight) {
243 layoutParams.height = (int) imageHeight; 246 layoutParams.height = (int) imageHeight;
244 layoutParams.width = (int) imageWidth; 247 layoutParams.width = (int) imageWidth;
245 } else { 248 } else {
246 layoutParams.height = viewHeight; 249 layoutParams.height = viewHeight;
247 layoutParams.width = (int) (imageWidth / imageHeight * viewHeight); 250 layoutParams.width = (int) (imageWidth / imageHeight * viewHeight);
248 } 251 }
249 } else { 252 } else {
250 if (viewWidth > imageWidth) { 253 if (viewWidth > imageWidth) {
251 layoutParams.height = (int) imageHeight; 254 layoutParams.height = (int) imageHeight;
252 layoutParams.width = (int) imageWidth; 255 layoutParams.width = (int) imageWidth;
253 } else { 256 } else {
254 layoutParams.height = (int) (imageHeight / imageWidth * viewWidth); 257 layoutParams.height = (int) (imageHeight / imageWidth * viewWidth);
255 layoutParams.width = viewWidth; 258 layoutParams.width = viewWidth;
256 } 259 }
257 } 260 }
258 261
259 layoutParams.setMargins(CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5)); 262 layoutParams.setMargins(CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5));
260 view.setLayoutParams(layoutParams); 263 view.setLayoutParams(layoutParams);
261 view.setImageBitmap(bitmap); 264 view.setImageBitmap(bitmap);
262 view.setVisibility(View.VISIBLE); 265 view.setVisibility(View.VISIBLE);
263 }); 266 });
264 } 267 }
265 } 268 }
266 } 269 }
267 270