Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
haihang
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
徐丛奇
haihang
Commits
26ea9322
Commit
26ea9322
authored
Aug 29, 2018
by
chengxiuhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test main
parent
3daae609
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
632 additions
and
575 deletions
+632
-575
EyeTestActivity.java
app/src/main/java/com/oo/eye/activity/EyeTestActivity.java
+596
-574
activity_eye_test.xml
app/src/main/res/layout/activity_eye_test.xml
+36
-1
No files found.
app/src/main/java/com/oo/eye/activity/EyeTestActivity.java
View file @
26ea9322
package
com
.
oo
.
eye
.
activity
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.CountDownTimer
;
import
android.view.KeyEvent
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.RelativeLayout
;
import
android.widget.TextView
;
...
...
@@ -24,391 +24,397 @@ import com.oo.eye.manager.DaemonSender;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Random
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.OnClick
;
import
static
com
.
oo
.
eye
.
bean
.
Eye
.
getLineSumByIndex
;
/**
*/
public
class
EyeTestActivity
extends
BaseActivity
{
static
final
int
TOP
=
0
;
static
final
int
RIGHT
=
1
;
static
final
int
BOTTOM
=
2
;
static
final
int
LEFT
=
3
;
private
E
mSelectE
;
@BindView
(
R2
.
id
.
rl_eye_test_center_time1
)
RelativeLayout
timeLayout1
;
@BindView
(
R2
.
id
.
tv_eye_test_center_time1
)
TextView
timeText1
;
@BindView
(
R2
.
id
.
rl_eye_test_center_e1
)
RelativeLayout
eLayout1
;
@BindView
(
R2
.
id
.
iv_eye_test_center_e1
)
ImageView
eImageView1
;
@BindView
(
R2
.
id
.
view_eye_test_mask1
)
View
maskView1
;
@BindView
(
R2
.
id
.
view_eye_test_mask2
)
View
maskView2
;
@BindView
(
R2
.
id
.
rl_eye_test_center_time2
)
RelativeLayout
timeLayout2
;
@BindView
(
R2
.
id
.
tv_eye_test_center_time2
)
TextView
timeText2
;
@BindView
(
R2
.
id
.
rl_eye_test_center_e2
)
RelativeLayout
eLayout2
;
@BindView
(
R2
.
id
.
iv_eye_test_center_e2
)
ImageView
eImageView2
;
@BindView
(
R2
.
id
.
tv_eye_vision1
)
TextView
eyeVision1
;
@BindView
(
R2
.
id
.
tv_eye_vision_count1
)
TextView
count1
;
@BindView
(
R2
.
id
.
tv_eye_vision_allow1
)
TextView
allow1
;
@BindView
(
R2
.
id
.
tv_eye_vision_right1
)
TextView
right1
;
@BindView
(
R2
.
id
.
tv_eye_vision_error1
)
TextView
error1
;
@BindView
(
R2
.
id
.
tv_eye_vision2
)
TextView
eyeVision2
;
@BindView
(
R2
.
id
.
tv_eye_vision_count2
)
TextView
count2
;
@BindView
(
R2
.
id
.
tv_eye_vision_allow2
)
TextView
allow2
;
@BindView
(
R2
.
id
.
tv_eye_vision_right2
)
TextView
right2
;
@BindView
(
R2
.
id
.
tv_eye_vision_error2
)
TextView
error2
;
private
int
test_dis
=
0
;
private
ArrayList
<
ArrayList
<
Eye
.
E
>>
mList
=
new
ArrayList
<>();
private
int
mLocation
;
private
int
mLevelIndex
=
-
1
;
private
LinkedHashMap
<
Integer
,
List
<
Eye
.
E
>>
mCollect
=
new
LinkedHashMap
<>();
private
EyeHistroyBean
mHistroyBean
;
//是否是右眼训练
private
boolean
isSecondTest
;
private
double
mLeftEye
=
5.0
;
private
int
mLeftLine
=
0
;
private
double
mRightEye
=
5.0
;
private
int
mRightLine
=
0
;
private
long
mLastOnKeyTime
=
-
1
;
private
boolean
isTestSuccess
=
false
;
private
boolean
isStartTest
=
false
;
private
long
totalTime
=
5000
;
private
long
intervalTime
=
1000
;
@Override
protected
void
onResume
()
{
super
.
onResume
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
}
@Override
protected
int
getLayoutId
()
{
return
R
.
layout
.
activity_eye_test
;
}
@Override
protected
void
init
()
{
NibiruUtils
.
switchVR
(
true
);
DaemonSender
.
startEyeTest
(
this
);
speak
(
"视力测试马上开启"
);
initialize
();
prepareQueue
();
}
private
void
initialize
()
{
mList
.
clear
();
for
(
int
i
=
0
;
i
<
14
;
i
++)
{
mList
.
add
(
initLineList
(
i
));
}
}
private
void
prepareQueue
()
{
mHistroyBean
=
EyeConfig
.
getInstance
().
getCuurentBean
();
continueTest
();
}
private
void
continueTest
(){
if
(!
isStartTest
)
{
isStartTest
=
true
;
resetView
(
true
);
}
}
/**
* 开始测试
* @param isNewTest true 代表测试的第一只眼 代表左眼 false代表测量另一只眼 右眼
*/
private
void
resetView
(
final
boolean
isNewTest
)
{
mLevelIndex
=
-
1
;
isSecondTest
=
!
isNewTest
;
String
eye
=
isNewTest
?
"右"
:
"左"
;
if
(
isNewTest
)
{
if
(
mHistroyBean
!=
null
)
{
mLeftEye
=
mHistroyBean
.
getLeft_eye
();
mRightEye
=
mHistroyBean
.
getRight_eye
();
}
}
timeLayout1
.
setVisibility
(
View
.
VISIBLE
);
timeLayout2
.
setVisibility
(
View
.
VISIBLE
);
eLayout1
.
setVisibility
(
View
.
GONE
);
eLayout2
.
setVisibility
(
View
.
GONE
);
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setVisibility
(
View
.
GONE
);
new
CountDownTimer
(
totalTime
,
intervalTime
){
@Override
public
void
onTick
(
long
millisUntilFinished
)
{
long
time
=
millisUntilFinished
/
1000
;
timeText1
.
setText
(
time
+
""
);
timeText2
.
setText
(
time
+
""
);
float
f
=
millisUntilFinished
*
1.0f
/
totalTime
;
if
(
isSecondTest
){
maskView1
.
setAlpha
(
1
-
f
);
maskView1
.
setVisibility
(
View
.
VISIBLE
);
maskView2
.
setVisibility
(
View
.
GONE
);
}
else
{
maskView2
.
setAlpha
(
1
-
f
);
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setVisibility
(
View
.
VISIBLE
);
}
LogUtil
.
e
(
"onTick"
);
}
@Override
public
void
onFinish
()
{
LogUtil
.
e
(
"onFinish"
);
timeLayout1
.
setVisibility
(
View
.
GONE
);
timeLayout2
.
setVisibility
(
View
.
GONE
);
eLayout1
.
setVisibility
(
View
.
VISIBLE
);
eLayout2
.
setVisibility
(
View
.
VISIBLE
);
double
e
=
5.0
;
//如果是左眼次测试
if
(
isNewTest
)
{
if
(
mHistroyBean
!=
null
)
{
e
=
mHistroyBean
.
getLeft_eye
();
}
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setAlpha
(
1
);
maskView2
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
//右眼测试
if
(
isSecondTest
)
{
if
(
mHistroyBean
!=
null
)
{
e
=
mHistroyBean
.
getRight_eye
();
}
}
maskView1
.
setAlpha
(
1
);
maskView1
.
setVisibility
(
View
.
VISIBLE
);
maskView2
.
setVisibility
(
View
.
GONE
);
}
mLevelIndex
=
Eye
.
getIndexByValue
(
e
,
true
)
-
1
;
next
(
true
);
}
}.
start
();
speak
(
"请遮住您的"
+
eye
+
"眼"
);
mCollect
.
clear
();
}
private
void
speak
(
String
text
){
DaemonSender
.
sendDBTTS
(
this
,
text
);
}
/**
* 描画E字
* @param e
*/
private
void
drewE
(
Eye
.
E
e
)
{
//视力等级
float
level
=
e
.
getLevel
();
//视标边长
int
px
=
Eye
.
getDip
(
this
,
level
);
public
class
EyeTestActivity
extends
BaseActivity
{
static
final
int
TOP
=
0
;
static
final
int
RIGHT
=
1
;
static
final
int
BOTTOM
=
2
;
static
final
int
LEFT
=
3
;
private
E
mSelectE
;
@BindView
(
R2
.
id
.
rl_eye_test_center_time1
)
RelativeLayout
timeLayout1
;
@BindView
(
R2
.
id
.
tv_eye_test_center_time1
)
TextView
timeText1
;
@BindView
(
R2
.
id
.
rl_eye_test_center_e1
)
RelativeLayout
eLayout1
;
@BindView
(
R2
.
id
.
iv_eye_test_center_e1
)
ImageView
eImageView1
;
@BindView
(
R2
.
id
.
view_eye_test_mask1
)
View
maskView1
;
@BindView
(
R2
.
id
.
view_eye_test_mask2
)
View
maskView2
;
@BindView
(
R2
.
id
.
rl_eye_test_center_time2
)
RelativeLayout
timeLayout2
;
@BindView
(
R2
.
id
.
tv_eye_test_center_time2
)
TextView
timeText2
;
@BindView
(
R2
.
id
.
rl_eye_test_center_e2
)
RelativeLayout
eLayout2
;
@BindView
(
R2
.
id
.
iv_eye_test_center_e2
)
ImageView
eImageView2
;
@BindView
(
R2
.
id
.
tv_eye_vision1
)
TextView
eyeVision1
;
@BindView
(
R2
.
id
.
tv_eye_vision_count1
)
TextView
count1
;
@BindView
(
R2
.
id
.
tv_eye_vision_allow1
)
TextView
allow1
;
@BindView
(
R2
.
id
.
tv_eye_vision_right1
)
TextView
right1
;
@BindView
(
R2
.
id
.
tv_eye_vision_error1
)
TextView
error1
;
@BindView
(
R2
.
id
.
tv_eye_vision2
)
TextView
eyeVision2
;
@BindView
(
R2
.
id
.
tv_eye_vision_count2
)
TextView
count2
;
@BindView
(
R2
.
id
.
tv_eye_vision_allow2
)
TextView
allow2
;
@BindView
(
R2
.
id
.
tv_eye_vision_right2
)
TextView
right2
;
@BindView
(
R2
.
id
.
tv_eye_vision_error2
)
TextView
error2
;
private
int
test_dis
=
0
;
private
ArrayList
<
ArrayList
<
E
>>
mList
=
new
ArrayList
<>();
private
int
mLocation
;
private
int
mLevelIndex
=
-
1
;
private
LinkedHashMap
<
Integer
,
List
<
E
>>
mCollect
=
new
LinkedHashMap
<>();
private
EyeHistroyBean
mHistroyBean
;
//是否是右眼训练
private
boolean
isSecondTest
;
private
double
mLeftEye
=
5.0
;
private
int
mLeftLine
=
0
;
private
double
mRightEye
=
5.0
;
private
int
mRightLine
=
0
;
private
long
mLastOnKeyTime
=
-
1
;
private
boolean
isTestSuccess
=
false
;
private
boolean
isStartTest
=
false
;
private
long
totalTime
=
5000
;
private
long
intervalTime
=
1000
;
@Override
protected
void
onResume
()
{
super
.
onResume
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
}
@Override
protected
int
getLayoutId
()
{
return
R
.
layout
.
activity_eye_test
;
}
@Override
protected
void
init
()
{
NibiruUtils
.
switchVR
(
true
);
DaemonSender
.
startEyeTest
(
this
);
speak
(
"视力测试马上开启"
);
initialize
();
prepareQueue
();
}
private
void
initialize
()
{
mList
.
clear
();
for
(
int
i
=
0
;
i
<
14
;
i
++)
{
mList
.
add
(
initLineList
(
i
));
}
}
private
void
prepareQueue
()
{
mHistroyBean
=
EyeConfig
.
getInstance
().
getCuurentBean
();
continueTest
();
}
private
void
continueTest
()
{
if
(!
isStartTest
)
{
isStartTest
=
true
;
resetView
(
true
);
}
}
/**
* 开始测试
*
* @param isNewTest true 代表测试的第一只眼 代表左眼 false代表测量另一只眼 右眼
*/
private
void
resetView
(
final
boolean
isNewTest
)
{
mLevelIndex
=
-
1
;
isSecondTest
=
!
isNewTest
;
String
eye
=
isNewTest
?
"右"
:
"左"
;
if
(
isNewTest
)
{
if
(
mHistroyBean
!=
null
)
{
mLeftEye
=
mHistroyBean
.
getLeft_eye
();
mRightEye
=
mHistroyBean
.
getRight_eye
();
}
}
timeLayout1
.
setVisibility
(
View
.
VISIBLE
);
timeLayout2
.
setVisibility
(
View
.
VISIBLE
);
eLayout1
.
setVisibility
(
View
.
GONE
);
eLayout2
.
setVisibility
(
View
.
GONE
);
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setVisibility
(
View
.
GONE
);
new
CountDownTimer
(
totalTime
,
intervalTime
)
{
@Override
public
void
onTick
(
long
millisUntilFinished
)
{
long
time
=
millisUntilFinished
/
1000
;
timeText1
.
setText
(
time
+
""
);
timeText2
.
setText
(
time
+
""
);
float
f
=
millisUntilFinished
*
1.0f
/
totalTime
;
if
(
isSecondTest
)
{
maskView1
.
setAlpha
(
1
-
f
);
maskView1
.
setVisibility
(
View
.
VISIBLE
);
maskView2
.
setVisibility
(
View
.
GONE
);
}
else
{
maskView2
.
setAlpha
(
1
-
f
);
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setVisibility
(
View
.
VISIBLE
);
}
LogUtil
.
e
(
"onTick"
);
}
@Override
public
void
onFinish
()
{
LogUtil
.
e
(
"onFinish"
);
timeLayout1
.
setVisibility
(
View
.
GONE
);
timeLayout2
.
setVisibility
(
View
.
GONE
);
eLayout1
.
setVisibility
(
View
.
VISIBLE
);
eLayout2
.
setVisibility
(
View
.
VISIBLE
);
double
e
=
5.0
;
//如果是左眼次测试
if
(
isNewTest
)
{
if
(
mHistroyBean
!=
null
)
{
e
=
mHistroyBean
.
getLeft_eye
();
}
maskView1
.
setVisibility
(
View
.
GONE
);
maskView2
.
setAlpha
(
1
);
maskView2
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
//右眼测试
if
(
isSecondTest
)
{
if
(
mHistroyBean
!=
null
)
{
e
=
mHistroyBean
.
getRight_eye
();
}
}
maskView1
.
setAlpha
(
1
);
maskView1
.
setVisibility
(
View
.
VISIBLE
);
maskView2
.
setVisibility
(
View
.
GONE
);
}
mLevelIndex
=
Eye
.
getIndexByValue
(
e
,
true
)
-
1
;
next
(
true
);
}
}.
start
();
speak
(
"请遮住您的"
+
eye
+
"眼"
);
mCollect
.
clear
();
}
private
void
speak
(
String
text
)
{
DaemonSender
.
sendDBTTS
(
this
,
text
);
}
/**
* 描画E字
*
* @param e
*/
private
void
drewE
(
E
e
)
{
//视力等级
float
level
=
e
.
getLevel
();
//视标边长
int
px
=
Eye
.
getDip
(
this
,
level
);
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(px, px);
// eImageView1.setLayoutParams(params);
// eImageView2.setLayoutParams(params);
//视标方向
int
resId
;
switch
(
e
.
getDirect
())
{
default
:
case
TOP:
resId
=
R
.
drawable
.
e_up
;
break
;
case
RIGHT:
resId
=
R
.
drawable
.
e_right
;
break
;
case
BOTTOM:
resId
=
R
.
drawable
.
e_down
;
break
;
case
LEFT:
resId
=
R
.
drawable
.
e_left
;
break
;
}
eImageView1
.
setImageResource
(
resId
);
eImageView2
.
setImageResource
(
resId
);
}
/**
* 随机生成每一行的视标E
*
* @param index 第几行
* @return list
*/
private
ArrayList
<
E
>
initLineList
(
int
index
)
{
float
level
=
Eye
.
getLevelSizeByIndex
(
index
);
int
sum
=
getLineSumByIndex
(
index
);
//随机数生成方向
Random
random
=
new
Random
();
E
e
;
ArrayList
<
E
>
list
=
new
ArrayList
<>();
int
direct
=
getFirstDirect
(
random
,
index
);
for
(
int
i
=
0
;
i
<
sum
;
i
++)
{
if
(
i
>
0
)
{
direct
=
getRandomDirect
(
list
,
direct
,
sum
);
}
e
=
new
E
(
i
,
direct
,
level
);
list
.
add
(
e
);
}
return
list
;
}
/**
* 获取第一个E;
*
* @param random
* @param index
* @return
*/
private
int
getFirstDirect
(
Random
random
,
int
index
)
{
int
direct
=
random
.
nextInt
(
4
);
if
(
index
>
0
)
{
if
(
mList
.
get
(
index
-
1
).
get
(
0
).
getDirect
()
==
direct
)
direct
=
getFirstDirect
(
random
,
index
);
}
return
direct
;
}
/**
* 获取下一个E的方向的判断;
*
* @param list
* @param direct
* @param sum
* @return
*/
private
int
getRandomDirect
(
ArrayList
<
E
>
list
,
int
direct
,
int
sum
)
{
int
lastDirect
=
direct
;
direct
=
randomDirect
(
direct
);
int
num
=
sum
/
2
;
if
(
sum
%
2
==
0
&&
sum
/
2
>
1
)
{
num
=
sum
/
2
-
1
;
}
if
(
getEDirectorNum
(
list
,
direct
)
>=
num
)
{
direct
=
getRandomDirect
(
list
,
lastDirect
,
sum
);
}
return
direct
;
}
/**
* 获取该行出现的形同方向的E的个数;
*
* @param list
* @param direct
* @return
*/
private
int
getEDirectorNum
(
ArrayList
<
E
>
list
,
int
direct
)
{
int
num
=
0
;
if
(
list
==
null
||
list
.
size
()
==
0
)
return
num
;
for
(
E
e
:
list
)
{
if
(
e
.
getDirect
()
==
direct
)
num
++;
}
return
num
;
}
/**
* 相邻的两个不能是同一个方向
*
* @param lastDirect 上一次的方向
* @return 新的方向
*/
private
int
randomDirect
(
int
lastDirect
)
{
//随机数生成方向
Random
random
=
new
Random
();
int
newDirect
=
random
.
nextInt
(
4
);
//相邻的不能一样
while
(
lastDirect
==
newDirect
)
{
newDirect
=
random
.
nextInt
(
4
);
}
return
newDirect
;
}
/**
* 下一个测试
*
*/
private
void
next
(
boolean
isNextLine
)
{
if
(
isNextLine
)
{
mLevelIndex
++
;
mLocation
=
0
;
eyeVision1
.
setText
(
""
+
Eye
.
getLevelByIndex
(
mLevelIndex
,
true
));
eyeVision2
.
setText
(
""
+
Eye
.
getLevelByIndex
(
mLevelIndex
,
true
)
);
count1
.
setText
(
""
);
count2
.
setText
(
""
);
allow1
.
setText
(
""
);
allow2
.
setText
(
""
);
right1
.
setText
(
""
);
right2
.
setText
(
""
);
error1
.
setText
(
""
);
error2
.
setText
(
""
);
}
else
{
mLocation
++;
}
mSelectE
=
mList
.
get
(
mLevelIndex
).
get
(
mLocation
);
drewE
(
mSelectE
);
}
/**
* 选择的方向
* @param direct
*/
private
void
userChoose
(
int
direct
)
{
LogUtil
.
e
(
"direct:"
+
direct
);
LogUtil
.
e
(
"mLevelIndex:"
+
mLevelIndex
);
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
if
(
null
==
list
||
list
.
size
()
==
0
)
{
list
=
new
ArrayList
<>();
}
mSelectE
.
setUserChoose
(
direct
);
list
.
add
(
mSelectE
);
mCollect
.
put
(
mLevelIndex
,
list
);
judge
();
//视标方向
int
resId
;
switch
(
e
.
getDirect
())
{
default
:
case
TOP:
resId
=
R
.
drawable
.
e_up
;
break
;
case
RIGHT:
resId
=
R
.
drawable
.
e_right
;
break
;
case
BOTTOM:
resId
=
R
.
drawable
.
e_down
;
break
;
case
LEFT:
resId
=
R
.
drawable
.
e_left
;
break
;
}
eImageView1
.
setImageResource
(
resId
);
eImageView2
.
setImageResource
(
resId
);
}
/**
* 随机生成每一行的视标E
*
* @param index 第几行
* @return list
*/
private
ArrayList
<
E
>
initLineList
(
int
index
)
{
float
level
=
Eye
.
getLevelSizeByIndex
(
index
);
int
sum
=
getLineSumByIndex
(
index
);
//随机数生成方向
Random
random
=
new
Random
();
E
e
;
ArrayList
<
E
>
list
=
new
ArrayList
<>();
int
direct
=
getFirstDirect
(
random
,
index
);
for
(
int
i
=
0
;
i
<
sum
;
i
++)
{
if
(
i
>
0
)
{
direct
=
getRandomDirect
(
list
,
direct
,
sum
);
}
e
=
new
E
(
i
,
direct
,
level
);
list
.
add
(
e
);
}
return
list
;
}
/**
* 获取第一个E;
*
* @param random
* @param index
* @return
*/
private
int
getFirstDirect
(
Random
random
,
int
index
)
{
int
direct
=
random
.
nextInt
(
4
);
if
(
index
>
0
)
{
if
(
mList
.
get
(
index
-
1
).
get
(
0
).
getDirect
()
==
direct
)
direct
=
getFirstDirect
(
random
,
index
);
}
return
direct
;
}
/**
* 获取下一个E的方向的判断;
*
* @param list
* @param direct
* @param sum
* @return
*/
private
int
getRandomDirect
(
ArrayList
<
E
>
list
,
int
direct
,
int
sum
)
{
int
lastDirect
=
direct
;
direct
=
randomDirect
(
direct
);
int
num
=
sum
/
2
;
if
(
sum
%
2
==
0
&&
sum
/
2
>
1
)
{
num
=
sum
/
2
-
1
;
}
if
(
getEDirectorNum
(
list
,
direct
)
>=
num
)
{
direct
=
getRandomDirect
(
list
,
lastDirect
,
sum
);
}
return
direct
;
}
/**
* 获取该行出现的形同方向的E的个数;
*
* @param list
* @param direct
* @return
*/
private
int
getEDirectorNum
(
ArrayList
<
E
>
list
,
int
direct
)
{
int
num
=
0
;
if
(
list
==
null
||
list
.
size
()
==
0
)
return
num
;
for
(
E
e
:
list
)
{
if
(
e
.
getDirect
()
==
direct
)
num
++;
}
return
num
;
}
/**
* 相邻的两个不能是同一个方向
*
* @param lastDirect 上一次的方向
* @return 新的方向
*/
private
int
randomDirect
(
int
lastDirect
)
{
//随机数生成方向
Random
random
=
new
Random
();
int
newDirect
=
random
.
nextInt
(
4
);
//相邻的不能一样
while
(
lastDirect
==
newDirect
)
{
newDirect
=
random
.
nextInt
(
4
);
}
return
newDirect
;
}
/**
* 下一个测试
*/
private
void
next
(
boolean
isNextLine
)
{
if
(
isNextLine
)
{
mLevelIndex
++;
mLocation
=
0
;
eyeVision1
.
setText
(
""
+
Eye
.
getLevelByIndex
(
mLevelIndex
,
true
))
;
eyeVision2
.
setText
(
""
+
Eye
.
getLevelByIndex
(
mLevelIndex
,
true
));
count1
.
setText
(
""
);
count2
.
setText
(
""
);
allow1
.
setText
(
""
);
allow2
.
setText
(
""
);
right1
.
setText
(
""
);
right2
.
setText
(
""
);
error1
.
setText
(
""
);
error2
.
setText
(
""
);
}
else
{
mLocation
++;
}
mSelectE
=
mList
.
get
(
mLevelIndex
).
get
(
mLocation
);
drewE
(
mSelectE
);
}
/**
* 选择的方向
*
* @param direct
*/
private
void
userChoose
(
int
direct
)
{
LogUtil
.
e
(
"direct:"
+
direct
);
LogUtil
.
e
(
"mLevelIndex:"
+
mLevelIndex
);
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
if
(
null
==
list
||
list
.
size
()
==
0
)
{
list
=
new
ArrayList
<>();
}
mSelectE
.
setUserChoose
(
direct
);
list
.
add
(
mSelectE
);
mCollect
.
put
(
mLevelIndex
,
list
);
judge
();
// int verifyErrorCount = 0;
// //获取每行有多少个e
// int lineSum = getLineSumByIndex(mLevelIndex);
...
...
@@ -476,93 +482,93 @@ public class EyeTestActivity extends BaseActivity{
// }
// }
// next(isNextLine);
}
private
void
judge
()
{
int
verifyErrorCount
=
0
;
//获取每行有多少个e
int
lineSum
=
getLineSumByIndex
(
mLevelIndex
);
//获取每行答对几个e
int
leastAnswerCount
=
Eye
.
getLeastAnswerCount
(
mLevelIndex
);
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
int
rightAnswerCount
=
0
;
for
(
E
e
:
list
)
{
if
(
e
.
isCorrect
())
{
rightAnswerCount
++;
}
}
LogUtil
.
e
(
"rightAnswerCount:"
+
rightAnswerCount
);
//当前行答错的数
int
errorCount
=
list
.
size
()
-
rightAnswerCount
;
LogUtil
.
e
(
"errorCount:"
+
errorCount
);
//判断是否满足答对的要求
boolean
isNextLine
=
rightAnswerCount
>=
leastAnswerCount
;
LogUtil
.
e
(
"isNextLine:"
+
isNextLine
);
mCollect
.
put
(
mLevelIndex
,
list
);
if
(
isNextLine
)
{
if
(
mLevelIndex
==
13
)
{
showResult
();
return
;
}
else
{
List
<
E
>
nextList
=
mCollect
.
get
(
mLevelIndex
+
1
);
if
(
nextList
!=
null
&&
nextList
.
size
()
>
0
)
{
showResult
();
return
;
}
}
}
//防止出现-1的现象;
if
(
lineSum
-
leastAnswerCount
>
0
)
{
verifyErrorCount
=
lineSum
-
leastAnswerCount
;
}
else
{
verifyErrorCount
=
0
;
}
count1
.
setText
(
"总共:"
+
lineSum
);
count2
.
setText
(
"总共:"
+
lineSum
);
allow1
.
setText
(
"正确数:"
+
leastAnswerCount
);
allow2
.
setText
(
"正确数:"
+
leastAnswerCount
);
right1
.
setText
(
"答对数:"
+
rightAnswerCount
);
right2
.
setText
(
"答对数:"
+
rightAnswerCount
);
error1
.
setText
(
"错误数:"
+
errorCount
);
error2
.
setText
(
"错误数:"
+
errorCount
);
//必须答对一半才往下走一行的
//如果错误次数超过一半 (默认位置时上一行没有数据时候)回退一行
if
(
errorCount
>
verifyErrorCount
)
{
//如果上一行数据不为空 结束测试
if
(
mLevelIndex
==
0
||
(
mCollect
.
containsKey
(
mLevelIndex
-
1
)
&&
mCollect
.
get
(
mLevelIndex
-
1
)
!=
null
&&
mCollect
.
get
(
mLevelIndex
-
1
).
size
()
>
0
))
{
if
(
isSecondTest
)
{
mRightLine
=
leastAnswerCount
;
}
else
{
mLeftLine
=
leastAnswerCount
;
}
showResult
();
return
;
}
else
{
backLastLine
();
return
;
}
}
next
(
isNextLine
);
}
/**
* 答错
*/
private
void
userChooseError
()
{
int
direct
=
mSelectE
.
getDirect
()+
1
;
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
if
(
null
==
list
||
list
.
size
()
==
0
)
{
list
=
new
ArrayList
<>();
}
mSelectE
.
setUserChoose
(
direct
);
list
.
add
(
mSelectE
);
mCollect
.
put
(
mLevelIndex
,
list
);
judge
();
}
private
void
judge
()
{
int
verifyErrorCount
=
0
;
//获取每行有多少个e
int
lineSum
=
getLineSumByIndex
(
mLevelIndex
);
//获取每行答对几个e
int
leastAnswerCount
=
Eye
.
getLeastAnswerCount
(
mLevelIndex
);
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
int
rightAnswerCount
=
0
;
for
(
E
e
:
list
)
{
if
(
e
.
isCorrect
())
{
rightAnswerCount
++;
}
}
LogUtil
.
e
(
"rightAnswerCount:"
+
rightAnswerCount
);
//当前行答错的数
int
errorCount
=
list
.
size
()
-
rightAnswerCount
;
LogUtil
.
e
(
"errorCount:"
+
errorCount
);
//判断是否满足答对的要求
boolean
isNextLine
=
rightAnswerCount
>=
leastAnswerCount
;
LogUtil
.
e
(
"isNextLine:"
+
isNextLine
);
mCollect
.
put
(
mLevelIndex
,
list
);
if
(
isNextLine
)
{
if
(
mLevelIndex
==
13
)
{
showResult
();
return
;
}
else
{
List
<
E
>
nextList
=
mCollect
.
get
(
mLevelIndex
+
1
);
if
(
nextList
!=
null
&&
nextList
.
size
()
>
0
)
{
showResult
();
return
;
}
}
}
//防止出现-1的现象;
if
(
lineSum
-
leastAnswerCount
>
0
)
{
verifyErrorCount
=
lineSum
-
leastAnswerCount
;
}
else
{
verifyErrorCount
=
0
;
}
count1
.
setText
(
"总共:"
+
lineSum
);
count2
.
setText
(
"总共:"
+
lineSum
);
allow1
.
setText
(
"正确数:"
+
leastAnswerCount
);
allow2
.
setText
(
"正确数:"
+
leastAnswerCount
);
right1
.
setText
(
"答对数:"
+
rightAnswerCount
);
right2
.
setText
(
"答对数:"
+
rightAnswerCount
);
error1
.
setText
(
"错误数:"
+
errorCount
);
error2
.
setText
(
"错误数:"
+
errorCount
);
//必须答对一半才往下走一行的
//如果错误次数超过一半 (默认位置时上一行没有数据时候)回退一行
if
(
errorCount
>
verifyErrorCount
)
{
//如果上一行数据不为空 结束测试
if
(
mLevelIndex
==
0
||
(
mCollect
.
containsKey
(
mLevelIndex
-
1
)
&&
mCollect
.
get
(
mLevelIndex
-
1
)
!=
null
&&
mCollect
.
get
(
mLevelIndex
-
1
).
size
()
>
0
))
{
if
(
isSecondTest
)
{
mRightLine
=
leastAnswerCount
;
}
else
{
mLeftLine
=
leastAnswerCount
;
}
showResult
();
return
;
}
else
{
backLastLine
();
return
;
}
}
next
(
isNextLine
);
}
/**
* 答错
*/
private
void
userChooseError
()
{
int
direct
=
mSelectE
.
getDirect
()
+
1
;
//获取当前行答过的e
List
<
E
>
list
=
mCollect
.
get
(
mLevelIndex
);
if
(
null
==
list
||
list
.
size
()
==
0
)
{
list
=
new
ArrayList
<>();
}
mSelectE
.
setUserChoose
(
direct
);
list
.
add
(
mSelectE
);
mCollect
.
put
(
mLevelIndex
,
list
);
judge
();
// int verifyErrorCount = 0;
// int lineSum = getLineSumByIndex(mLevelIndex);
// int leastAnswerCount = Eye.getLeastAnswerCount(mLevelIndex);
...
...
@@ -630,117 +636,133 @@ public class EyeTestActivity extends BaseActivity{
// }
// }
// next(isNextLine);
}
//返回到上一行
private
void
backLastLine
()
{
mLevelIndex
=
mLevelIndex
-
2
;
next
(
true
);
}
/**
* 单眼测试结束
*/
private
void
showResult
()
{
//如果不是手动提交
final
Double
eyeResult
=
getResult
();
if
(
isSecondTest
)
{
//右眼训练
mRightEye
=
eyeResult
;
showStudentTestDialog
();
}
else
{
//左眼训练
mLeftEye
=
eyeResult
;
resetView
(
false
);
return
;
}
}
private
void
showStudentTestDialog
()
{
int
selectId
=
PreferencesUtils
.
getInt
(
EyeConfig
.
EYE_SETTING_KEY
,
0
);
String
text
=
(
"测视结束左眼视力"
+
mLeftEye
+
"右眼视力"
+
mRightEye
).
replace
(
"."
,
"点"
);
if
(
selectId
==
1
){
text
=
(
"测视结束左眼视力"
+
Eye
.
transformSmall
(
mLeftEye
)+
"右眼视力"
+
Eye
.
transformSmall
(
mRightEye
)).
replace
(
"."
,
"点"
);
}
speak
(
text
);
Intent
intent
=
new
Intent
(
this
,
AfterEyeTestActivity
.
class
);
intent
.
putExtra
(
"leftEye"
,
mLeftEye
);
intent
.
putExtra
(
"rightEye"
,
mRightEye
);
intent
.
putExtra
(
"leftLine"
,
mLeftLine
);
intent
.
putExtra
(
"rightLine"
,
mRightLine
);
startActivity
(
intent
);
finish
();
}
@Override
public
boolean
dispatchKeyEvent
(
KeyEvent
event
)
{
if
(
event
.
getAction
()
==
KeyEvent
.
ACTION_UP
){
//两次点击大于1秒
long
currentTime
=
System
.
currentTimeMillis
();
if
(
mLastOnKeyTime
>
0
&&
currentTime
-
mLastOnKeyTime
<
500
)
{
return
true
;
}
mLastOnKeyTime
=
currentTime
;
switch
(
event
.
getKeyCode
())
{
case
KeyEvent
.
KEYCODE_BUTTON_X
:
userChoose
(
TOP
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_B
:
userChoose
(
BOTTOM
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_A
:
userChoose
(
LEFT
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_Y
:
userChoose
(
RIGHT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_UP
:
userChoose
(
TOP
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_DOWN
:
userChoose
(
BOTTOM
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_LEFT
:
userChoose
(
LEFT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_RIGHT
:
userChoose
(
RIGHT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_CENTER
:
//遥控中间键
//用户点击返回键:
userChooseError
();
return
true
;
}
return
true
;
}
return
super
.
dispatchKeyEvent
(
event
);
}
private
double
getResult
()
{
if
(
null
==
mCollect
||
mCollect
.
size
()
==
0
)
{
if
(
test_dis
==
0
)
{
return
4.0
;
}
else
{
return
3.8
;
}
}
int
result
=
0
;
for
(
LinkedHashMap
.
Entry
<
Integer
,
List
<
E
>>
entry
:
mCollect
.
entrySet
())
{
result
=
entry
.
getKey
();
}
final
String
levelByIndex
=
""
+
Eye
.
getLevelByIndex
(
result
,
test_dis
==
0
);
return
Double
.
parseDouble
(
levelByIndex
);
}
@Override
public
boolean
onKeyDown
(
int
keyCode
,
KeyEvent
event
)
{
if
(
keyCode
==
KeyEvent
.
KEYCODE_BACK
){
finish
();
return
true
;
}
return
super
.
onKeyDown
(
keyCode
,
event
);
}
}
//返回到上一行
private
void
backLastLine
()
{
mLevelIndex
=
mLevelIndex
-
2
;
next
(
true
);
}
/**
* 单眼测试结束
*/
private
void
showResult
()
{
//如果不是手动提交
final
Double
eyeResult
=
getResult
();
if
(
isSecondTest
)
{
//右眼训练
mRightEye
=
eyeResult
;
showStudentTestDialog
();
}
else
{
//左眼训练
mLeftEye
=
eyeResult
;
resetView
(
false
);
return
;
}
}
private
void
showStudentTestDialog
()
{
int
selectId
=
PreferencesUtils
.
getInt
(
EyeConfig
.
EYE_SETTING_KEY
,
0
);
String
text
=
(
"测视结束左眼视力"
+
mLeftEye
+
"右眼视力"
+
mRightEye
).
replace
(
"."
,
"点"
);
if
(
selectId
==
1
)
{
text
=
(
"测视结束左眼视力"
+
Eye
.
transformSmall
(
mLeftEye
)
+
"右眼视力"
+
Eye
.
transformSmall
(
mRightEye
)).
replace
(
"."
,
"点"
);
}
speak
(
text
);
Intent
intent
=
new
Intent
(
this
,
AfterEyeTestActivity
.
class
);
intent
.
putExtra
(
"leftEye"
,
mLeftEye
);
intent
.
putExtra
(
"rightEye"
,
mRightEye
);
intent
.
putExtra
(
"leftLine"
,
mLeftLine
);
intent
.
putExtra
(
"rightLine"
,
mRightLine
);
startActivity
(
intent
);
finish
();
}
@Override
public
boolean
dispatchKeyEvent
(
KeyEvent
event
)
{
if
(
event
.
getAction
()
==
KeyEvent
.
ACTION_UP
)
{
//两次点击大于1秒
long
currentTime
=
System
.
currentTimeMillis
();
if
(
mLastOnKeyTime
>
0
&&
currentTime
-
mLastOnKeyTime
<
500
)
{
return
true
;
}
mLastOnKeyTime
=
currentTime
;
switch
(
event
.
getKeyCode
())
{
case
KeyEvent
.
KEYCODE_BUTTON_X
:
userChoose
(
TOP
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_B
:
userChoose
(
BOTTOM
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_A
:
userChoose
(
LEFT
);
return
true
;
case
KeyEvent
.
KEYCODE_BUTTON_Y
:
userChoose
(
RIGHT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_UP
:
userChoose
(
TOP
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_DOWN
:
userChoose
(
BOTTOM
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_LEFT
:
userChoose
(
LEFT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_RIGHT
:
userChoose
(
RIGHT
);
return
true
;
case
KeyEvent
.
KEYCODE_DPAD_CENTER
:
//遥控中间键
//用户点击返回键:
userChooseError
();
return
true
;
}
return
true
;
}
return
super
.
dispatchKeyEvent
(
event
);
}
private
double
getResult
()
{
if
(
null
==
mCollect
||
mCollect
.
size
()
==
0
)
{
if
(
test_dis
==
0
)
{
return
4.0
;
}
else
{
return
3.8
;
}
}
int
result
=
0
;
for
(
LinkedHashMap
.
Entry
<
Integer
,
List
<
E
>>
entry
:
mCollect
.
entrySet
())
{
result
=
entry
.
getKey
();
}
final
String
levelByIndex
=
""
+
Eye
.
getLevelByIndex
(
result
,
test_dis
==
0
);
return
Double
.
parseDouble
(
levelByIndex
);
}
@Override
public
boolean
onKeyDown
(
int
keyCode
,
KeyEvent
event
)
{
if
(
keyCode
==
KeyEvent
.
KEYCODE_BACK
)
{
finish
();
return
true
;
}
return
super
.
onKeyDown
(
keyCode
,
event
);
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
// TODO: add setContentView(...) invocation
ButterKnife
.
bind
(
this
);
}
@OnClick
({
R
.
id
.
next_left
,
R
.
id
.
next_right
})
public
void
onClick
(
View
view
)
{
switch
(
view
.
getId
())
{
case
R
.
id
.
next_left
:
break
;
case
R
.
id
.
next_right
:
break
;
}
}
}
app/src/main/res/layout/activity_eye_test.xml
View file @
26ea9322
...
...
@@ -12,6 +12,24 @@
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:layout_marginTop=
"@dimen/dp_16"
android:layout_centerHorizontal=
"true"
android:id=
"@+id/title_left"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"5.0 -3"
android:textColor=
"@color/text_color"
android:textSize=
"@dimen/sp_22"
/>
<TextView
android:layout_marginTop=
"@dimen/dp_16"
android:id=
"@+id/next_left"
android:layout_alignParentRight=
"true"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"X 放弃当前,跳到下一位"
android:textColor=
"@color/text_color"
android:textSize=
"@dimen/sp_16"
/>
<RelativeLayout
android:id=
"@+id/rl_eye_test_center1"
android:layout_width=
"match_parent"
...
...
@@ -175,7 +193,24 @@
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
<TextView
android:layout_marginTop=
"@dimen/dp_16"
android:layout_centerHorizontal=
"true"
android:id=
"@+id/title_right"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"5.0 -3"
android:textColor=
"@color/text_color"
android:textSize=
"@dimen/sp_22"
/>
<TextView
android:layout_marginTop=
"@dimen/dp_16"
android:id=
"@+id/next_right"
android:layout_alignParentRight=
"true"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"X 放弃当前,跳到下一位"
android:textColor=
"@color/text_color"
android:textSize=
"@dimen/sp_16"
/>
<RelativeLayout
android:id=
"@+id/rl_eye_test_center2"
android:layout_width=
"match_parent"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment