diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index c720390..759f7c4 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -6,5 +6,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b39d3fa..0a28a16 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -97,4 +97,9 @@ dependencies {
implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
+
+
+ /** 鲁班压缩 */
+ implementation 'top.zibin:Luban:1.1.8'
+
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b20833b..c0764ec 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -144,6 +144,7 @@
+
implemen
ImageBean data = list.get(binding.viewPager.getCurrentItem());
new PhotoViewDialog(this).show(data.source);
});
+
+ binding.btnJudge.setVisibility(type == 0 ? View.VISIBLE : View.GONE);
+ binding.btnJudge.setOnClickListener(v -> {
+ goJudge();
+ });
+ }
+
+ private void goJudge() {
+ if (list.isEmpty()) return;
+ int position = binding.viewPager.getCurrentItem();
+ ImageBean imageBean = list.get(position);
+ Bitmap bitmap = BitmapFactory.decodeFile(imageBean.getPath());
+ if (bitmap == null || imageBean.getCuts() == null) {
+ showToast("请先框选题目");
+ return;
+ }
+ ItemImageBinding ib = imageAdapter.viewArray.get(position);
+ if (ib == null) {
+ showToast("出错");
+ return;
+ }
+ View view = ib.ivPic;
+ float[] size = CutUtil.measureBitmap(view, bitmap);
+
+ ArrayList rects = new ArrayList<>();
+ for (ImageBean.Cut cut: imageBean.getCuts()) {
+ if (cut.getRect1() == null) continue;
+ Rect rectV = cut.getRect1();
+ rects.add(getRectB(rectV, bitmap, size));
+ }
+ if (list.isEmpty()) {
+ showToast("请先框选题目");
+ return;
+ }
+
+ Intent intent = new Intent(this, JudgeActivity.class);
+ intent.putExtra("path", imageBean.getPath());
+ intent.putParcelableArrayListExtra("rects", rects);
+
+ startActivity(intent);
+ }
+
+ private Rect getRectB(Rect rectV, Bitmap bitmap, float[] measuredSize) {
+ float realW = measuredSize[0];
+ float realH = measuredSize[1];
+ float offsetX = measuredSize[2];
+ float offsetY = measuredSize[3];
+ float percentX = bitmap.getWidth() / realW;
+ float percentY = bitmap.getHeight() / realH;
+
+ float left = (rectV.left - offsetX) * percentX;
+ float right = (rectV.right - offsetX) * percentX;
+ float top = (rectV.top - offsetY) * percentY;
+ float bottom = (rectV.bottom - offsetY) * percentY;
+ Rect rectB = new Rect((int) left, (int) top, (int) right, (int) bottom);
+ return rectB;
}
public void clearText() {
diff --git a/app/src/main/java/com/hjx/parent/JudgeActivity.java b/app/src/main/java/com/hjx/parent/JudgeActivity.java
new file mode 100644
index 0000000..c87cfde
--- /dev/null
+++ b/app/src/main/java/com/hjx/parent/JudgeActivity.java
@@ -0,0 +1,123 @@
+package com.hjx.parent;
+
+import android.annotation.SuppressLint;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.os.Bundle;
+
+import com.bumptech.glide.Glide;
+import com.hjx.parent.databinding.ActivityJudgeBinding;
+import com.hjx.parent.databinding.LayoutJudgeRectBinding;
+import com.hjx.parent.rx.BaseRxActivity;
+import com.hjx.parent.utils.CutUtil;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.Single;
+import top.zibin.luban.Luban;
+
+public class JudgeActivity extends BaseRxActivity {
+
+ private Bitmap bitmap;
+
+ private final List mList = new ArrayList<>();
+
+ @SuppressLint("CheckResult")
+ @Override
+ public void initView(Bundle savedInstanceState) {
+ binding.ivBack.setOnClickListener(v -> {
+ onBackPressed();
+ });
+ String path = getIntent().getStringExtra("path");
+ if (path == null) return;
+ final ArrayList rects = getIntent().getParcelableArrayListExtra("rects");
+ if (rects == null) return;
+
+ Single.just(path)
+ .map(origin -> Luban.with(this).load(origin).ignoreBy(300).get().get(0))
+ .map(file -> Glide.with(this).asBitmap().load(file).submit().get())
+ .compose(transformSingle())
+ .subscribe((bitmap, th) -> {
+ if (th != null) th.printStackTrace();
+ if (bitmap == null) return;
+ this.bitmap = bitmap;
+
+ binding.ivPic.setImageBitmap(bitmap);
+ CutUtil.onLayoutReady(binding.ivPic, v -> {
+ prepareRects(rects);
+ });
+ });
+ }
+
+ private void prepareRects(List rects) {
+ mList.clear();
+ binding.flRects.removeAllViews();
+ float[] measuredSize = CutUtil.measureBitmap(binding.ivPic, bitmap);
+ for (int i = 0; i < rects.size(); i++) {
+ Rect it = rects.get(i);
+ Bitmap bitmap = CutUtil.cut(this.bitmap, it.left, it.top, it.width(), it.height(), this);
+ Rect rect = measureRect(it, measuredSize);
+ LayoutJudgeRectBinding vb = showRect(rect);
+ mList.add(new JudgeCut(i, bitmap, rect, vb));
+ }
+ }
+
+ private LayoutJudgeRectBinding showRect(Rect rect) {
+ LayoutJudgeRectBinding vb = LayoutJudgeRectBinding.inflate(getLayoutInflater(), binding.flRects, false);
+
+ vb.getRoot().setMinimumWidth(rect.width());
+ vb.getRoot().setMinimumHeight(rect.height());
+ vb.getRoot().setTranslationX((float) rect.left);
+ vb.getRoot().setTranslationY((float) rect.top);
+ vb.getRoot().setOnClickListener(v -> {
+ v.setSelected(!v.isSelected());
+ checkCount();
+ });
+ binding.flRects.addView(vb.getRoot());
+
+ return vb;
+ }
+
+ private void checkCount() {
+ //
+ }
+
+ /** bitmapRect 转换为 viewRect */
+ private Rect measureRect(Rect rect, float[] measuredSize) {
+ float realW = measuredSize[0];
+ float realH = measuredSize[1];
+ float offsetX = measuredSize[2];
+ float offsetY = measuredSize[3];
+ float percentX = realW / bitmap.getWidth();
+ float percentY = realH / bitmap.getHeight();
+
+ float left = rect.left * percentX + offsetX;
+ float right = rect.right * percentX + offsetX;
+ float top = rect.top * percentY + offsetY;
+ float bottom = rect.bottom * percentY + offsetY;
+ return new Rect((int) left, (int) top, (int) right, (int) bottom);
+ }
+
+ @Override
+ protected ActivityJudgeBinding getViewBinding() {
+ return ActivityJudgeBinding.inflate(getLayoutInflater());
+ }
+
+ static class JudgeCut {
+ final int index;
+ final Bitmap bitmap;
+ final Rect rect;
+ final LayoutJudgeRectBinding vb;
+
+ int correctResult = 0;
+
+ public JudgeCut(int index, Bitmap bitmap, Rect rect, LayoutJudgeRectBinding vb) {
+ this.index = index;
+ this.bitmap = bitmap;
+ this.rect = rect;
+ this.vb = vb;
+ }
+ }
+}
diff --git a/app/src/main/java/com/hjx/parent/adapter/ImageAdapter.java b/app/src/main/java/com/hjx/parent/adapter/ImageAdapter.java
index f8f3416..1b22866 100644
--- a/app/src/main/java/com/hjx/parent/adapter/ImageAdapter.java
+++ b/app/src/main/java/com/hjx/parent/adapter/ImageAdapter.java
@@ -7,6 +7,7 @@ import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.Log;
+import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -27,9 +28,12 @@ import com.prws.common.utils.CommonUtil;
import java.util.List;
public class ImageAdapter extends RecyclerView.Adapter {
+ public SparseArray viewArray = new SparseArray<>();
+
private List list;
private ImageActivity context;
+
public ImageAdapter(ImageActivity context, List list) {
this.context = context;
this.list = list;
@@ -44,6 +48,8 @@ public class ImageAdapter extends RecyclerView.Adapter
@Override
public void onBindViewHolder(@NonNull ImageHolder holder, int position) {
+ viewArray.put(position, holder.binding);
+
ImageBean imageBean = list.get(position);
Bitmap bitmap = BitmapFactory.decodeFile(imageBean.getPath());
float imageHeight = bitmap.getHeight();
diff --git a/app/src/main/java/com/hjx/parent/utils/CutUtil.java b/app/src/main/java/com/hjx/parent/utils/CutUtil.java
new file mode 100644
index 0000000..f2ebe9b
--- /dev/null
+++ b/app/src/main/java/com/hjx/parent/utils/CutUtil.java
@@ -0,0 +1,75 @@
+package com.hjx.parent.utils;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.view.View;
+import android.view.ViewTreeObserver;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
+import com.hjx.parent.function.Function1;
+
+public class CutUtil {
+
+ public static float[] measureBitmap(View view, Bitmap bitmap) {
+ float realW;
+ float realH;
+ float offsetX;
+ float offsetY;
+
+ float vp = 1f * view.getWidth() / view.getHeight();
+ float bp = 1f * bitmap.getWidth() / bitmap.getHeight();
+
+ if (vp > bp) {
+ realW = view.getHeight() * bp;
+ realH = (float) view.getHeight();
+ offsetY = 0f;
+ offsetX = (view.getWidth() - realW) * 0.5f;
+ } else if (vp < bp) {
+ realW = (float) view.getWidth();
+ realH = view.getWidth() * (1f / bp);
+ offsetX = 0f;
+ offsetY = (view.getHeight() - realH) * 0.5f;
+ } else {
+ realW = (float) view.getWidth();
+ realH = (float) view.getHeight();
+ offsetX = 0f;
+ offsetY = 0f;
+ }
+
+ return new float[]{realW, realH, offsetX, offsetY};
+ }
+
+ public static Bitmap cut(Bitmap source, float x, float y, int w, int h, Context context) {
+ // 获取 Glide 的 BitmapPool
+ BitmapPool bitmapPool = Glide.get(context).getBitmapPool();
+
+ // 从 BitmapPool 中获取可复用的 Bitmap
+ Bitmap result = bitmapPool.get(w, h, source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888);
+
+ // 填充白色背景
+ result.eraseColor(Color.WHITE);
+
+ // 创建画布并绘制
+ Canvas canvas = new Canvas(result);
+ Paint paint = new Paint();
+ canvas.drawBitmap(source, -x, -y, paint);
+
+ return result;
+ }
+
+ public static void onLayoutReady(final View view, final Function1 action) {
+ view.getViewTreeObserver().addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ action.invoke(view);
+ }
+ }
+ );
+ }
+}
diff --git a/app/src/main/res/drawable/bg_judge_cut.xml b/app/src/main/res/drawable/bg_judge_cut.xml
new file mode 100644
index 0000000..3a9b67d
--- /dev/null
+++ b/app/src/main/res/drawable/bg_judge_cut.xml
@@ -0,0 +1,15 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_add.png b/app/src/main/res/drawable/ic_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9be9df27bebf1a37bf2f252ce13772f3b5121da
GIT binary patch
literal 1150
zcmV-^1cCdBP)Px(I7vi7R7gw3S50VKRTTcteeccWO=n1(G__4;vMBhIB4V`*e<}(V>O!Ry5^XIg
z*i8baY1M@bn=vi~D@`Va#6<)J9VG!NR6((bVl4$li%6>$y68+&ZGH^SWPUR5-6QwC
zH`DyiJlhoSVul&cJ>R|OeBU|e5`3)Iw`MmWWNej?PlD+YfZG5xdRwOfx(MR$1jJ{^
zl`da-ZT;W1+)_1zmci*Lao`{^+F_X699vleO9`-aw~_z}0SLqWUCLiz!Wh&1$ar^S
zdNu#60yht2o)N$afSRDJm}_0aI|u=eDNm9_cj`#wla)3u2X1FA_HcHP>cU;Jko5<)
ziWSv`fkJjD^?kS-V`MKhTMQg$5nZ480Ge?CwsljWmCc$C*rgBCvytZ!Coey6f>>Fx
zL}rLd?}S_<(6VQtgV-8Q9g1|7|Ed7Tj%S`lDEu+|2(LceslbAc1$J+2VzUSQXVwLt@pEGjn5}%Aq668}q-l@y3c6K9GBlu0C$|^@Xs9Ec
z>@cxuog3N#N3qgzbe|ef@Gx;#loa*Cv;#dv%ck#p+Mn7n5u6n8#|TeFAx3{Cb<`?@z*y5GUt69bq$(+9evan<-fC4TU^jaS&L50
zy$?-W`(dv+@&Y=pPnydrY5OQ^=dR{XAQ^>$=+{{1^DSOgK>Yd?k>8kOB$wi56^@Qm_z-)7xvb4a`Uh;&|0HM3hcs_rT38PHf
zh+=OwVbxL)T8Cygpk!>7Qa%Nuo!+CZJdsX1k2dBrLWol^N|)qb@73p=y|W1rRG
Qj{pDw07*qoM6N<$f>_5LdH?_b
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/ic_judge_rect_select.xml b/app/src/main/res/drawable/ic_judge_rect_select.xml
new file mode 100644
index 0000000..702bdae
--- /dev/null
+++ b/app/src/main/res/drawable/ic_judge_rect_select.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_rect_20.xml b/app/src/main/res/drawable/ic_rect_20.xml
new file mode 100644
index 0000000..f895e77
--- /dev/null
+++ b/app/src/main/res/drawable/ic_rect_20.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/png_ic_judge_correct.png b/app/src/main/res/drawable/png_ic_judge_correct.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd2c42ba55a27d8b0bfe3fdea506201de939c632
GIT binary patch
literal 1115
zcmV-h1f=_kP)Px(6-h)vR7gvWm0fI9RTPESI@9S7IxX~G6gASCV$c!;ohbwY5{M-;0|JReG&a8Q
z01*ihqb9D`15EbR6GqliDMYN$atxeD-kO0*fkeNcUm6n-%m%068
zS_bKT+-KcypS{o7>kzm27M(yzX>s{Vf@>+v136<@stXW0Wpvmz{)Wc67yI)em@gPj
zSX)4D2XN1=5|6|$O71)HP|vQ3x^dvgS_78fUwD9E-H0#+s6j58X?RYq8(e*ic~PzL0i9CUZZ7WQ1tx9i2n?LeRe
zFVbkMg!K}Z8*;~pwqpz&P1@fBSPCGO1)@#CRNHOZFtl8K3WYNV?N10iJ*KBxhrlB}
z-6JXMIL`d01y?#I16_7%`kf`$6^F3+hF-t9MVUt#YQvPfXrBjRi`pKqNxwZQX#3Qu
z#cshd62Vcuh_jBcq$!yCi_vzw9>Qk={$?OGGxi_`hpVvbMZF4QXS^o;ac;6TU3TF5
zzi1(DKmlBE-OMT)|84*~8ELn_q}P0EZ@ebG#RG(sR-FNx#$d(`$L94k4ki4hyi|VE
zOd^z%te>v4Nc3$0@dBjJ8BJPe0ai*{7Z0TmdE!XYI!tg)&W|a_mstQf{l+P7BrrE;
zO)zf6OYBt%dey6o(WLE7&J@?pgpSnqCP#MstN}kA-)nUP%mApG5Z@XLruTTU6(^@H
zF7Ww|gShB{`vBZQV17f+6$>Y<4-L8De-D!QAXbywII4*x%NG&m1ibT#CarS-D`fOU
zd|vw7QIY2rWyRJ>f^+i01^qnGn_k+o9NE$JXkz+Ppbh{y%}BfT9mTZ}cE>`gZMl$W
zTUnJ@&`Q!82ba3R!P;1`?^14jWxKUk;$}eKFp{u0l6YUhAAvKe2fkVlCs!P9vx78h
zCRjESza}{g1N(nEmGxyr0K61sY3GNT>&)t*fU#{k?X;LJd8
z>XDY^7`S1ZiPBjHg+GFr0qBaLm*O=&AAwN51Wz7>?`oCxoH2Y0LcnvyjI{Jql!Z_vUKzzIj9AnY8cq3H1P0lb9`_l-?@@^n&P;iv||B
h`(tx^yc>1X_aDsLub=z_sU`pb002ovPDHLkV1m-03UdGe
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/png_ic_rect.png b/app/src/main/res/drawable/png_ic_rect.png
new file mode 100644
index 0000000000000000000000000000000000000000..f089f4260f0fd7e70e3536b66092a2b2b53480f7
GIT binary patch
literal 1757
zcmdUwYdF&j9LGnCZIU4>$7P$#P)OF?mTmm8RVXE0n4*SUTBJ}Lo3K?nnp4b3t)iY9
zLP#5}oXBOGa(ggx)LaU=vQH-
z#1kG(+x7_S_v+1kO}jkE%uagvcelA+BQ+%!i?|MDUq?x$gX>_`E|rk5u&@`C-NJrJ
zo1L~S9+(Gf$G{?N4tLJVL#+FQ5{lxd>``@symQM_OIF(75@KVg6yxLLylfohezS8;
zIu8%Ox(dJ;Zr$Rq2`*a`m%&4Oj)qMycU{|IVxE^{mXyo;RYw+K7U}ttK-(bXqvFh3
zD>^u&>rqLhna0M(*Go%FkyN?f^;`a{C9BIXHuuS7GDnv}=|EbH5_(1|L<@@8W9h1M
z+jbyp5dl;;G|E-1{9zjtZ0(eC@K5R2=HLNMmIh4PI%n$KS`nCAA2g&}VD^egb)$rq
zdTD@j?^vTUD>l16>a9m4ob9&l`ZV$Jz+UDsm&F;g(BA$yF+q%|9gIyup)y-L
zF3X{k2ZWZkrcMkUZz2)ykMgMO6Yc-JI6$2Am_fL&lB1Q$;`YH<<$lJ|1p|kaU!44a
z(S5gNPPV9qbJORTbjwZTXU;ulf*2Gx#Pn0UR!jDtHj%5(8;6etd^5qaiqG@5lO>Vg
z69_gt)cg%VnZ>a@>%W}
zCux=6VbD^QZeydy@XOo)9m|n5tUzeLz=&mYFE9@((R*IaW*yO((4)H3(#vfGh+bB5
zIu9O%jJ{+EslG`$Y5@*}^rK+^jU5J+*V7kskUJ^0w09lZE^o(lR}L~s?@}Jk2T6**
zF1$bW4=r0IdBo|CHvZQT&(%s!#IWMFx0hFbp|8TX{l?^vSR+MH4m(yI
zcWULiX8i&vXhBw*L7p@D&FK@njf{KDv(3ntcy?-c24>_ZTULhy7~|Jl#>FY1CDJn*Op&&5q1P
zHoM?ZCAB?#nejtwnr>IFb=({}stBSoiif66LO+O^aU9;+lE~zY!@}+iYGqOuJ7ee6
zO
z)zs8fgEh!%1u%7WPh@q-T3ic%C3gJ&{re45P-z31JBn~HvBNu_K!bA|t^Q`qyqY&d
zvLI%Qg5u7!VIj7}99|0P&Ac9p`yQ-Nj4YsLH5~9Ep^P?th^=p>2jD9D2{HPZ{`-F*
z7=SZ9qz+zButJ6RlmKFb%Hr#|PB7>@7tm&q>GTKN1tNR;0;TRpSbqUk^h9$2
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/png_rect_add.png b/app/src/main/res/drawable/png_rect_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9be9df27bebf1a37bf2f252ce13772f3b5121da
GIT binary patch
literal 1150
zcmV-^1cCdBP)Px(I7vi7R7gw3S50VKRTTcteeccWO=n1(G__4;vMBhIB4V`*e<}(V>O!Ry5^XIg
z*i8baY1M@bn=vi~D@`Va#6<)J9VG!NR6((bVl4$li%6>$y68+&ZGH^SWPUR5-6QwC
zH`DyiJlhoSVul&cJ>R|OeBU|e5`3)Iw`MmWWNej?PlD+YfZG5xdRwOfx(MR$1jJ{^
zl`da-ZT;W1+)_1zmci*Lao`{^+F_X699vleO9`-aw~_z}0SLqWUCLiz!Wh&1$ar^S
zdNu#60yht2o)N$afSRDJm}_0aI|u=eDNm9_cj`#wla)3u2X1FA_HcHP>cU;Jko5<)
ziWSv`fkJjD^?kS-V`MKhTMQg$5nZ480Ge?CwsljWmCc$C*rgBCvytZ!Coey6f>>Fx
zL}rLd?}S_<(6VQtgV-8Q9g1|7|Ed7Tj%S`lDEu+|2(LceslbAc1$J+2VzUSQXVwLt@pEGjn5}%Aq668}q-l@y3c6K9GBlu0C$|^@Xs9Ec
z>@cxuog3N#N3qgzbe|ef@Gx;#loa*Cv;#dv%ck#p+Mn7n5u6n8#|TeFAx3{Cb<`?@z*y5GUt69bq$(+9evan<-fC4TU^jaS&L50
zy$?-W`(dv+@&Y=pPnydrY5OQ^=dR{XAQ^>$=+{{1^DSOgK>Yd?k>8kOB$wi56^@Qm_z-)7xvb4a`Uh;&|0HM3hcs_rT38PHf
zh+=OwVbxL)T8Cygpk!>7Qa%Nuo!+CZJdsX1k2dBrLWol^N|)qb@73p=y|W1rRG
Qj{pDw07*qoM6N<$f>_5LdH?_b
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/png_rect_selected.png b/app/src/main/res/drawable/png_rect_selected.png
new file mode 100644
index 0000000000000000000000000000000000000000..757bbfe9a95d8dcd84dfb1d8af3e8ed52421e936
GIT binary patch
literal 902
zcmV;119|+3P)Px&KuJVFR7gv`m(NR7Q545NQ<#FQA$8FtO1Q8DCNdN#?9m^gwlnTEktle8=G^T_j*omW}eMVXZPMc=X}q(
z_ndRT*M>E*1IK{#z**opa5!Z81Na2I16~84fuFJ5+F~di1#SQrfD^Hth1R{mE8tPk
z_G=`YXuy|(S=|RREdqwCeFNHo7iRWmzz2bQK+8V@hMPSI1@Ozb5Dt6*a06Ep1gg1t
z0$c+E+K+HxiLN=ppqjgf#$7Z5Uk08h2~=}?1$ZVO8n9IFd>nQ
z1$@zf?*O+Fk!@RB8=aka?d>uz
zc4cyMlDfJ&Ha0fQTz3obo8X*17YSIlEh{UFKp?=%%8F_6R8>{&$!u+HjmpYO=I5ne
zP35fsF9Sy+Y4rB?($v(%*47rSt*s0U4D6}i+}vE|=H|%E{4-fazrVjf+9s|Dun#z7
zrX|k2UN0FL8ERQtrJlzFs$%z#1DHW1XBoDzI43&dyR+R;D}h
z`~5hbPNt@&sI9GKXlO`ZTU=bExVV`0^>s_YQMcM|w=*&_LV0<)?reE^nU0PQm2FyD
zn)<)Jy{!T=X&u4yLE4
z$;-?8%lE><0)>Tz7BQ8YYNyk{2P;-NIXR4tjZsigpsTO0u2ND`!qU=`6&IS08X)@`
znc3Ods<86&^Hp!Rw6xII*S8-~ePpWC_cOf&ba;3ekH@p8l`Nvmh18|pP7c5W>^5xj
zM6Sh?LIRCMK&F7Yq?0H@sh*1e|4Ds%jkGEpSQzHxB$2)AL9(GU%}DfC_;jL3pOCyZ
zBdFO{8;@7c+!Y586GDG8Qr%d6!dwi!m#oyCyrW*m^Mo;iXpc6h@TE`?+663`37GJ<
cF{_WZ-{_9$+vw1mPyhe`07*qoM6N<$f`+!QVgLXD
literal 0
HcmV?d00001
diff --git a/app/src/main/res/layout/activity_image.xml b/app/src/main/res/layout/activity_image.xml
index 9c75ac8..5c394d6 100644
--- a/app/src/main/res/layout/activity_image.xml
+++ b/app/src/main/res/layout/activity_image.xml
@@ -1,7 +1,10 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:orientation="vertical"
+ tools:ignore="HardcodedText">
-
@@ -128,35 +132,45 @@
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="图片编辑"
+ android:textColor="#333"
android:textSize="11sp" />
-
+
+
+
+
+ android:textSize="16sp" />
-
+ android:textSize="16sp" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_judge.xml b/app/src/main/res/layout/activity_judge.xml
new file mode 100644
index 0000000..6cc4468
--- /dev/null
+++ b/app/src/main/res/layout/activity_judge.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_judge_rect.xml b/app/src/main/res/layout/layout_judge_rect.xml
new file mode 100644
index 0000000..6906ba3
--- /dev/null
+++ b/app/src/main/res/layout/layout_judge_rect.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file