Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
app-FounderMap
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
常超
app-FounderMap
Commits
c5c9915f
Commit
c5c9915f
authored
Mar 31, 2021
by
Luosp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
导航基本完成,需要细节优化
parent
0d0d6e64
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
3304 additions
and
0 deletions
+3304
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/DistanceBean.java
+22
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/GeoRect.java
+242
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/JamPath.java
+46
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/MyJunctionView.java
+40
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/RouteDrawStyle.java
+159
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/ScreenUtil.java
+791
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/SpannableBuilder.java
+166
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/TimeBean.java
+22
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/TmcStatus.java
+16
-0
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/Utils.java
+771
-0
arcgislib/src/main/res/drawable-xhdpi/icon_navi_line.png
+0
-0
arcgislib/src/main/res/drawable-xhdpi/icon_right_black_arrow.png
+0
-0
arcgislib/src/main/res/drawable-xhdpi/icon_route_text_start.png
+0
-0
arcgislib/src/main/res/drawable-xhdpi/navi_launcher.png
+0
-0
arcgislib/src/main/res/drawable-xhdpi/signal_light_horizontal.png
+0
-0
arcgislib/src/main/res/drawable/naving_exit_port_bg.xml
+6
-0
arcgislib/src/main/res/drawable/naving_view_corner_bg.xml
+9
-0
arcgislib/src/main/res/layout/layout_navi_board.xml
+157
-0
arcgislib/src/main/res/layout/layout_navi_junction.xml
+69
-0
arcgislib/src/main/res/layout/layout_navi_root.xml
+33
-0
arcgislib/src/main/res/values/navi_dimens.xml
+755
-0
No files found.
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/DistanceBean.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
/**
* 描述距离
*/
public
class
DistanceBean
{
public
String
distanceValue
;
public
String
distanceUnit
;
public
DistanceBean
(
String
distanceValue
,
String
distanceUnit
)
{
this
.
distanceValue
=
distanceValue
;
this
.
distanceUnit
=
distanceUnit
;
}
@Override
public
String
toString
()
{
return
"DistanceBean{"
+
"distanceValue='"
+
distanceValue
+
'\''
+
", distanceUnit='"
+
distanceUnit
+
'\''
+
'}'
;
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/GeoRect.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
com.minedata.minenavi.mapdal.LatLng
;
/**
* 矩形类
*/
public
class
GeoRect
{
LatLng
pointLB
;
LatLng
pointRT
;
public
GeoRect
()
{
this
.
pointLB
=
new
LatLng
(
0
,
0
);
this
.
pointRT
=
new
LatLng
(
0
,
0
);
}
public
GeoRect
(
LatLng
pointLB
,
LatLng
pointRT
)
{
if
(
pointLB
!=
null
&&
pointRT
!=
null
)
{
this
.
pointLB
=
pointLB
;
this
.
pointRT
=
pointRT
;
}
else
{
this
.
pointLB
=
new
LatLng
(
0
,
0
);
this
.
pointRT
=
new
LatLng
(
0
,
0
);
}
}
public
GeoRect
(
double
left
,
double
top
,
double
right
,
double
bottom
)
{
this
.
pointLB
=
new
LatLng
(
bottom
,
left
);
this
.
pointRT
=
new
LatLng
(
top
,
right
);
}
public
GeoRect
(
GeoRect
rect
)
{
if
(
rect
==
null
)
{
this
.
pointLB
=
new
LatLng
(
0
,
0
);
this
.
pointRT
=
new
LatLng
(
0
,
0
);
}
else
{
this
.
pointLB
=
rect
.
pointLB
;
this
.
pointRT
=
rect
.
pointRT
;
}
}
public
LatLng
getPointLB
()
{
return
this
.
pointLB
;
}
public
void
setPointLB
(
LatLng
pointLB
)
{
this
.
pointLB
=
pointLB
;
}
public
LatLng
getPointRT
()
{
return
this
.
pointRT
;
}
public
void
setPointRT
(
LatLng
pointRT
)
{
this
.
pointRT
=
pointRT
;
}
public
double
getLeft
()
{
return
this
.
pointLB
.
longitude
;
}
public
double
getRight
()
{
return
this
.
pointRT
.
longitude
;
}
public
double
getTop
()
{
return
this
.
pointRT
.
latitude
;
}
public
double
getBottom
()
{
return
this
.
pointLB
.
latitude
;
}
public
void
setLeft
(
float
left
)
{
this
.
pointLB
.
longitude
=
left
;
}
public
void
setRight
(
float
right
)
{
this
.
pointRT
.
longitude
=
right
;
}
public
void
setTop
(
float
top
)
{
this
.
pointRT
.
latitude
=
top
;
}
public
void
setBottom
(
float
bottom
)
{
this
.
pointLB
.
latitude
=
bottom
;
}
public
boolean
isIntersect
(
GeoRect
rect
)
{
return
Math
.
min
(
this
.
pointLB
.
longitude
,
this
.
pointRT
.
longitude
)
<=
Math
.
max
(
rect
.
pointLB
.
longitude
,
rect
.
pointRT
.
longitude
)
&&
Math
.
min
(
rect
.
pointLB
.
longitude
,
rect
.
pointRT
.
longitude
)
<=
Math
.
max
(
this
.
pointLB
.
longitude
,
this
.
pointRT
.
longitude
)
&&
Math
.
min
(
this
.
pointLB
.
latitude
,
this
.
pointRT
.
latitude
)
<=
Math
.
max
(
rect
.
pointLB
.
latitude
,
rect
.
pointRT
.
latitude
)
&&
Math
.
min
(
rect
.
pointLB
.
latitude
,
rect
.
pointRT
.
latitude
)
<=
Math
.
max
(
this
.
pointLB
.
latitude
,
this
.
pointRT
.
latitude
);
}
public
String
toString
()
{
return
new
String
(
"LB:"
+
this
.
pointLB
.
longitude
+
","
+
this
.
pointLB
.
latitude
+
"RT:"
+
this
.
pointRT
.
longitude
+
","
+
this
.
pointRT
.
latitude
);
}
public
boolean
contains
(
GeoRect
another
)
{
return
this
.
pointLB
.
longitude
<=
another
.
pointLB
.
longitude
&&
this
.
pointRT
.
longitude
>=
another
.
pointRT
.
longitude
&&
this
.
pointLB
.
latitude
<=
another
.
pointLB
.
latitude
&&
this
.
pointRT
.
latitude
>=
another
.
pointRT
.
latitude
;
}
public
boolean
contains
(
int
x
,
int
y
)
{
return
this
.
pointLB
.
longitude
<=
x
&&
this
.
pointRT
.
longitude
>=
x
&&
this
.
pointLB
.
latitude
<=
y
&&
this
.
pointRT
.
latitude
>=
y
;
}
public
boolean
intersect
(
GeoRect
another
)
{
return
this
.
intersect
(
another
.
pointLB
.
longitude
,
another
.
pointRT
.
latitude
,
another
.
pointRT
.
longitude
,
another
.
pointLB
.
latitude
);
}
public
boolean
intersect
(
double
left
,
double
top
,
double
right
,
double
bottom
)
{
if
(
this
.
intersects
(
left
,
top
,
right
,
bottom
))
{
if
(
this
.
pointLB
.
longitude
<
left
)
{
this
.
pointLB
.
longitude
=
left
;
}
if
(
this
.
pointRT
.
latitude
>
top
)
{
this
.
pointRT
.
latitude
=
top
;
}
if
(
this
.
pointRT
.
longitude
>
right
)
{
this
.
pointRT
.
longitude
=
right
;
}
if
(
this
.
pointLB
.
latitude
<
bottom
)
{
this
.
pointLB
.
latitude
=
bottom
;
}
return
true
;
}
else
{
return
false
;
}
}
public
boolean
intersects
(
double
left
,
double
top
,
double
right
,
double
bottom
)
{
return
this
.
pointLB
.
longitude
<
right
&&
left
<
this
.
pointRT
.
longitude
&&
this
.
pointRT
.
latitude
>
bottom
&&
top
>
this
.
pointLB
.
latitude
;
}
public
static
boolean
intersects
(
GeoRect
a
,
GeoRect
b
)
{
return
a
.
pointLB
.
longitude
<
b
.
pointRT
.
longitude
&&
b
.
pointLB
.
longitude
<
a
.
pointRT
.
longitude
&&
a
.
pointRT
.
latitude
>
b
.
pointLB
.
latitude
&&
b
.
pointRT
.
latitude
>
a
.
pointLB
.
latitude
;
}
public
void
extend
(
GeoRect
another
)
{
if
(
another
!=
null
)
{
if
(
this
.
pointLB
.
longitude
>
another
.
pointLB
.
longitude
)
{
this
.
pointLB
.
longitude
=
another
.
pointLB
.
longitude
;
}
if
(
this
.
pointRT
.
longitude
<
another
.
pointRT
.
longitude
)
{
this
.
pointRT
.
longitude
=
another
.
pointRT
.
longitude
;
}
if
(
this
.
pointLB
.
latitude
>
another
.
pointLB
.
latitude
)
{
this
.
pointLB
.
latitude
=
another
.
pointLB
.
latitude
;
}
if
(
this
.
pointRT
.
latitude
<
another
.
pointRT
.
latitude
)
{
this
.
pointRT
.
latitude
=
another
.
pointRT
.
latitude
;
}
}
}
public
void
extend
(
LatLng
point
)
{
if
(
point
!=
null
)
{
if
(
this
.
pointLB
.
longitude
>
point
.
longitude
)
{
this
.
pointLB
.
longitude
=
point
.
longitude
;
}
if
(
this
.
pointRT
.
longitude
<
point
.
longitude
)
{
this
.
pointRT
.
longitude
=
point
.
longitude
;
}
if
(
this
.
pointLB
.
latitude
>
point
.
latitude
)
{
this
.
pointLB
.
latitude
=
point
.
latitude
;
}
if
(
this
.
pointRT
.
latitude
<
point
.
latitude
)
{
this
.
pointRT
.
latitude
=
point
.
latitude
;
}
}
}
public
boolean
isEmpty
()
{
return
this
.
pointLB
.
longitude
>=
this
.
pointRT
.
longitude
||
this
.
pointLB
.
latitude
>=
this
.
pointRT
.
latitude
;
}
public
double
width
()
{
return
this
.
pointRT
.
longitude
-
this
.
pointLB
.
longitude
;
}
public
double
height
()
{
return
this
.
pointRT
.
latitude
-
this
.
pointLB
.
longitude
;
}
public
double
centerX
()
{
return
(
this
.
pointLB
.
longitude
+
this
.
pointRT
.
longitude
)
/
2
;
}
public
double
centerY
()
{
return
(
this
.
pointLB
.
latitude
+
this
.
pointRT
.
latitude
)
/
2
;
}
public
LatLng
center
()
{
return
new
LatLng
(
this
.
centerY
(),
this
.
centerX
());
}
public
boolean
equals
(
Object
o
)
{
if
(
o
!=
null
&&
o
instanceof
GeoRect
)
{
GeoRect
another
=
(
GeoRect
)
o
;
if
(
this
.
pointLB
.
equals
(
another
.
pointLB
)
&&
this
.
pointRT
.
equals
(
another
.
pointRT
))
{
return
true
;
}
}
return
false
;
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/JamPath.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.graphics.Point
;
import
com.minedata.minenavi.mapdal.LatLng
;
import
com.minedata.minenavi.navi.RouteBase
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 路线路况类
*/
public
class
JamPath
{
public
List
<
LatLng
>
paths
;
//路径点集合
public
int
tmcStatus
;
//路况状态
public
JamPath
()
{
}
public
JamPath
(
List
<
LatLng
>
paths
,
int
tmcStatus
)
{
this
.
paths
=
paths
;
this
.
tmcStatus
=
tmcStatus
;
}
public
static
List
<
JamPath
>
convertRouteBaseToJamPath
(
RouteBase
routeBase
)
{
List
<
JamPath
>
jamPaths
=
new
ArrayList
<>();
if
(
routeBase
!=
null
)
{
int
num
=
routeBase
.
getSegmentNumber
();
for
(
int
i
=
0
;
i
<
num
;
i
++)
{
JamPath
jamPath
=
new
JamPath
();
List
<
LatLng
>
latLngList
=
new
ArrayList
<>();
jamPath
.
tmcStatus
=
routeBase
.
getSegmentTmc
(
i
);
Point
[]
pointArray
=
routeBase
.
getSegmentFinePoints
(
i
);
for
(
Point
point
:
pointArray
)
{
LatLng
latLng
=
new
LatLng
((
double
)
point
.
y
/
100000.0
D
,
(
double
)
point
.
x
/
100000.0
D
);
latLngList
.
add
(
latLng
);
}
jamPath
.
paths
=
latLngList
;
jamPaths
.
add
(
jamPath
);
}
}
return
jamPaths
;
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/MyJunctionView.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.content.Context
;
import
android.util.AttributeSet
;
import
com.minedata.minenavi.navi.JunctionView
;
import
javax.microedition.khronos.egl.EGLConfig
;
import
javax.microedition.khronos.opengles.GL10
;
public
class
MyJunctionView
extends
JunctionView
{
private
OnJunctionViewListener
onJunctionViewListener
;
public
MyJunctionView
(
Context
context
)
{
super
(
context
);
}
public
MyJunctionView
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
}
@Override
public
void
onSurfaceCreated
(
GL10
gl
,
EGLConfig
config
)
{
super
.
onSurfaceCreated
(
gl
,
config
);
if
(
onJunctionViewListener
!=
null
)
{
onJunctionViewListener
.
onSurfaceCreated
(
gl
,
config
);
}
}
public
void
setOnJunctionViewListener
(
OnJunctionViewListener
listener
)
{
this
.
onJunctionViewListener
=
listener
;
}
public
interface
OnJunctionViewListener
{
void
onSurfaceCreated
(
GL10
gl
,
EGLConfig
config
);
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/RouteDrawStyle.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.graphics.Color
;
/**
* 路线的描画式样
*/
public
class
RouteDrawStyle
{
private
int
blockedColor
,
heavyColor
,
mediumColor
,
lightColor
;
//路线颜色
private
int
blockedColorHighLight
,
heavyColorHighLight
,
mediumColorHighLight
,
lightColorHighLight
;
//高亮路线颜色
private
int
blockedOutColor
,
heavyOutColor
,
mediumOutColor
,
lightOutColor
;
//路线描边
private
float
width
,
widthOut
;
/**
* 设置模式
*/
public
void
setRouteDrawStyle
(
RouteStyleE
e
)
{
switch
(
e
)
{
case
common:
blockedColor
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColor
=
Color
.
parseColor
(
"#f8b8b8"
);
//拥堵
mediumColor
=
Color
.
parseColor
(
"#f2e2ae"
);
//缓慢
lightColor
=
Color
.
parseColor
(
"#ade3c8"
);
//通畅
blockedColorHighLight
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColorHighLight
=
Color
.
parseColor
(
"#f45656"
);
//拥堵
mediumColorHighLight
=
Color
.
parseColor
(
"#ffae00"
);
//缓慢
lightColorHighLight
=
Color
.
parseColor
(
"#00be4c"
);
//通畅
blockedOutColor
=
Color
.
parseColor
(
"#741111"
);
//描边
heavyOutColor
=
Color
.
parseColor
(
"#b23434"
);
mediumOutColor
=
Color
.
parseColor
(
"#c28000"
);
lightOutColor
=
Color
.
parseColor
(
"#237042"
);
width
=
6
f
;
widthOut
=
7
f
;
break
;
case
lightNavi:
blockedColor
=
Color
.
parseColor
(
"#7f060e"
);
//严重拥堵
heavyColor
=
Color
.
parseColor
(
"#c03b37"
);
//拥堵
mediumColor
=
Color
.
parseColor
(
"#dea927"
);
//缓慢
lightColor
=
Color
.
parseColor
(
"#1fab6c"
);
//通畅
blockedColorHighLight
=
Color
.
parseColor
(
"#7f060e"
);
//严重拥堵
heavyColorHighLight
=
Color
.
parseColor
(
"#c03b37"
);
//拥堵
mediumColorHighLight
=
Color
.
parseColor
(
"#dea927"
);
//缓慢
lightColorHighLight
=
Color
.
parseColor
(
"#1fab6c"
);
//通畅
blockedOutColor
=
Color
.
parseColor
(
"#531418"
);
//描边
heavyOutColor
=
Color
.
parseColor
(
"#492326"
);
mediumOutColor
=
Color
.
parseColor
(
"#a26910"
);
lightOutColor
=
Color
.
parseColor
(
"#026948"
);
width
=
7.5f
;
widthOut
=
8.5f
;
break
;
case
darkNavi:
blockedColor
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColor
=
Color
.
parseColor
(
"#f45656"
);
//拥堵
mediumColor
=
Color
.
parseColor
(
"#ffae00"
);
//缓慢
lightColor
=
Color
.
parseColor
(
"#13c768"
);
//通畅
blockedColorHighLight
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColorHighLight
=
Color
.
parseColor
(
"#f45656"
);
//拥堵
mediumColorHighLight
=
Color
.
parseColor
(
"#ffae00"
);
//缓慢
lightColorHighLight
=
Color
.
parseColor
(
"#13c768"
);
//通畅
blockedOutColor
=
Color
.
parseColor
(
"#741111"
);
//描边
heavyOutColor
=
Color
.
parseColor
(
"#b23434"
);
mediumOutColor
=
Color
.
parseColor
(
"#c28000"
);
lightOutColor
=
Color
.
parseColor
(
"#0d7957"
);
width
=
7.5f
;
widthOut
=
8.5f
;
break
;
default
:
blockedColor
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColor
=
Color
.
parseColor
(
"#f45656"
);
//拥堵
mediumColor
=
Color
.
parseColor
(
"#ffae00"
);
//缓慢
lightColor
=
Color
.
parseColor
(
"#00be4c"
);
//通畅
blockedColorHighLight
=
Color
.
parseColor
(
"#aa1b1b"
);
//严重拥堵
heavyColorHighLight
=
Color
.
parseColor
(
"#f45656"
);
//拥堵
mediumColorHighLight
=
Color
.
parseColor
(
"#ffae00"
);
//缓慢
lightColorHighLight
=
Color
.
parseColor
(
"#00be4c"
);
//通畅
blockedOutColor
=
Color
.
parseColor
(
"#741111"
);
//描边
heavyOutColor
=
Color
.
parseColor
(
"#b23434"
);
mediumOutColor
=
Color
.
parseColor
(
"#c28000"
);
lightOutColor
=
Color
.
parseColor
(
"#237042"
);
width
=
6
f
;
widthOut
=
7
f
;
break
;
}
}
public
int
getBlockedColorHighLight
()
{
return
blockedColorHighLight
;
}
public
int
getHeavyColorHighLight
()
{
return
heavyColorHighLight
;
}
public
int
getLightColorHighLight
()
{
return
lightColorHighLight
;
}
public
int
getMediumColorHighLight
()
{
return
mediumColorHighLight
;
}
public
int
getBlockedColor
()
{
return
blockedColor
;
}
public
int
getHeavyColor
()
{
return
heavyColor
;
}
public
int
getMediumColor
()
{
return
mediumColor
;
}
public
int
getLightColor
()
{
return
lightColor
;
}
public
int
getBlockedOutColor
()
{
return
blockedOutColor
;
}
public
int
getHeavyOutColor
()
{
return
heavyOutColor
;
}
public
int
getMediumOutColor
()
{
return
mediumOutColor
;
}
public
int
getLightOutColor
()
{
return
lightOutColor
;
}
public
float
getWidth
()
{
return
width
;
}
public
float
getWidthOut
()
{
return
widthOut
;
}
public
enum
RouteStyleE
{
common
,
lightNavi
,
darkNavi
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/ScreenUtil.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.res.Configuration
;
import
android.content.res.Resources
;
import
android.database.ContentObserver
;
import
android.graphics.Point
;
import
android.graphics.Rect
;
import
android.graphics.drawable.Drawable
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Handler
;
import
android.provider.Settings
;
import
android.util.DisplayMetrics
;
import
android.util.Log
;
import
android.view.Display
;
import
android.view.DisplayCutout
;
import
android.view.View
;
import
android.view.Window
;
import
android.view.WindowInsets
;
import
android.view.WindowManager
;
import
androidx.annotation.RequiresApi
;
import
com.gyf.immersionbar.BarHide
;
import
com.gyf.immersionbar.ImmersionBar
;
import
java.lang.reflect.Method
;
import
java.util.List
;
import
cn.com.founder.arcgislib.R
;
import
static
android
.
content
.
Context
.
WINDOW_SERVICE
;
/**
* 获取一些屏幕相关的信息
*/
public
class
ScreenUtil
{
private
static
final
String
PHONE_FLAG_XIAO_MI
=
"xiaomi"
;
private
static
final
String
PHONE_FLAG_HUA_WEI
=
"HUAWEI"
;
private
static
final
String
PHONE_FLAG_OPPO
=
"oppo"
;
private
static
final
String
PHONE_FLAG_VIVO
=
"vivo"
;
public
static
final
int
NAVIGATION_BAR_ON_RIGHT
=
1
;
public
static
final
int
NAVIGATION_BAR_ON_LiFT
=
3
;
private
Context
mContext
;
private
Window
mWindow
;
private
WindowManager
mWindowManager
;
private
View
statusView
;
private
int
mNavigationBarHeight
;
private
boolean
isUserChangeSystemBrightness
=
false
;
private
int
mCurrentSystemBrightness
=
100
;
private
DisplayMetrics
mDisplayMetrics
;
private
int
mNotchWidth
=
0
;
private
int
mNotchHeight
=
0
;
private
int
mHorizontalMaxWidth
;
public
void
init
(
Context
context
,
Window
window
)
{
mContext
=
context
;
mWindow
=
window
;
mWindowManager
=
(
WindowManager
)
mContext
.
getSystemService
(
WINDOW_SERVICE
);
mHorizontalMaxWidth
=
Utils
.
getInstance
().
dp2Px
(
465
);
}
private
static
class
SingletonHolder
{
public
static
final
ScreenUtil
instance
=
new
ScreenUtil
();
}
public
static
ScreenUtil
getInstance
()
{
return
SingletonHolder
.
instance
;
}
public
int
getNotchWidth
()
{
if
(
mNotchWidth
!=
0
)
{
return
mNotchWidth
;
}
int
notchWidth
=
0
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
P
)
{
//小米8升级到MIUI 11后获取的刘海宽度有问题 为676 官方为560,有问题会影响自定义状态栏,为防止其他型号手机升级有问题,以下数据写死
//来源 https://dev.mi.com/console/doc/detail?pId=1341
if
(
Build
.
MODEL
.
equals
(
"MI 8"
)
||
Build
.
MODEL
.
equals
(
"MI 8 Explorer Edition"
)
||
Build
.
MODEL
.
equals
(
"MI 8 UD"
))
{
notchWidth
=
560
;
}
else
if
(
Build
.
MODEL
.
equals
(
"MI 8 SE"
))
{
notchWidth
=
540
;
}
else
if
(
Build
.
MODEL
.
equals
(
"MI8Lite"
))
{
notchWidth
=
296
;
}
else
if
(
Build
.
MODEL
.
equals
(
"POCO F1"
))
{
notchWidth
=
588
;
}
else
if
(
Build
.
MODEL
.
equals
(
"Redmi 6 Pro"
))
{
notchWidth
=
352
;
}
else
if
(
Build
.
MODEL
.
equals
(
"Redmi Note 7"
))
{
notchWidth
=
116
;
}
if
(
notchWidth
!=
0
)
{
return
notchWidth
;
}
DisplayCutout
displayCutout
=
getDisplayCutout
((
Activity
)
mContext
);
if
(
displayCutout
!=
null
)
{
List
<
Rect
>
boundingRects
=
displayCutout
.
getBoundingRects
();
if
(
boundingRects
.
size
()
!=
0
)
{
int
left
=
boundingRects
.
get
(
0
).
left
;
int
screenWidth
=
getScreenWidth
();
if
(
left
>
screenWidth
/
2
)
{
//刘海描述右边的区域
notchWidth
=
screenWidth
-
(
screenWidth
-
left
)
*
2
;
}
else
{
notchWidth
=
screenWidth
-
left
*
2
;
}
}
}
}
else
{
if
(
isXiaoMiPhone
())
{
notchWidth
=
getXiaoMiNotchSize
(
mContext
)[
0
];
}
else
if
(
isHUAWEIPhone
())
{
notchWidth
=
getHuaWeiNotchSize
(
mContext
)[
0
];
}
else
if
(
isOPPOPhone
())
{
notchWidth
=
324
;
}
else
if
(
isVivoPhone
())
{
notchWidth
=
Utils
.
getInstance
().
dp2Px
(
100
);
}
}
mNotchWidth
=
notchWidth
;
return
notchWidth
;
}
public
int
getNotchHeight
()
{
if
(
mNotchHeight
!=
0
)
{
return
mNotchHeight
;
}
int
notchHeight
=
0
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
P
)
{
DisplayCutout
displayCutout
=
getDisplayCutout
((
Activity
)
mContext
);
if
(
displayCutout
!=
null
)
{
//通过cutout是否为null判断目前是否开启了刘海屏
List
<
Rect
>
boundingRects
=
displayCutout
.
getBoundingRects
();
if
(
boundingRects
.
size
()
!=
0
)
{
Rect
rect
=
boundingRects
.
get
(
0
);
notchHeight
=
rect
.
height
();
//如果刘海的高度大于150,证明是横屏,有问题,取width()
if
(
notchHeight
>
150
)
{
notchHeight
=
rect
.
width
();
}
}
}
else
{
return
notchHeight
;
}
}
else
{
if
(
isXiaoMiPhone
())
{
notchHeight
=
getXiaoMiNotchSize
(
mContext
)[
1
];
}
else
if
(
isHUAWEIPhone
())
{
notchHeight
=
getHuaWeiNotchSize
(
mContext
)[
1
];
}
else
if
(
isOPPOPhone
())
{
notchHeight
=
80
;
}
else
if
(
isVivoPhone
())
{
notchHeight
=
Utils
.
getInstance
().
dp2Px
(
32
);
// 32dp为状态栏高度,刘海高度为27dp
}
}
if
(
notchHeight
==
0
)
{
notchHeight
=
getStatusBarHeight
();
}
mNotchHeight
=
notchHeight
;
return
notchHeight
;
}
public
int
getLiuHaiping
()
{
if
(
mNotchHeight
!=
0
)
{
return
mNotchHeight
;
}
int
notchHeight
=
0
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
P
)
{
DisplayCutout
displayCutout
=
getDisplayCutout
((
Activity
)
mContext
);
if
(
displayCutout
!=
null
)
{
//通过cutout是否为null判断目前是否开启了刘海屏
List
<
Rect
>
boundingRects
=
displayCutout
.
getBoundingRects
();
if
(
boundingRects
.
size
()
!=
0
)
{
Rect
rect
=
boundingRects
.
get
(
0
);
notchHeight
=
rect
.
height
();
//如果刘海的高度大于150,证明是横屏,有问题,取width()
if
(
notchHeight
>
150
)
{
notchHeight
=
rect
.
width
();
}
}
}
else
{
return
notchHeight
;
}
}
else
{
if
(
isXiaoMiPhone
())
{
notchHeight
=
getXiaoMiNotchSize
(
mContext
)[
1
];
}
else
if
(
isHUAWEIPhone
())
{
notchHeight
=
getHuaWeiNotchSize
(
mContext
)[
1
];
}
else
if
(
isOPPOPhone
())
{
notchHeight
=
80
;
}
else
if
(
isVivoPhone
())
{
notchHeight
=
Utils
.
getInstance
().
dp2Px
(
32
);
// 32dp为状态栏高度,刘海高度为27dp
}
}
return
notchHeight
;
}
@RequiresApi
(
api
=
Build
.
VERSION_CODES
.
M
)
private
DisplayCutout
getDisplayCutout
(
Activity
activity
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
P
)
{
View
decorView
=
activity
.
getWindow
().
getDecorView
();
if
(
decorView
!=
null
)
{
WindowInsets
windowInsets
=
decorView
.
getRootWindowInsets
();
if
(
windowInsets
!=
null
)
{
return
windowInsets
.
getDisplayCutout
();
}
}
}
return
null
;
}
/**
* 获取状态栏高度
*/
public
int
getStatusBarHeight
()
{
int
statusBarHeight
=
0
;
try
{
Class
<?>
clazz
=
Class
.
forName
(
"com.android.internal.R$dimen"
);
Object
object
=
clazz
.
newInstance
();
int
height
=
Integer
.
parseInt
(
clazz
.
getField
(
"status_bar_height"
).
get
(
object
).
toString
());
statusBarHeight
=
mContext
.
getResources
().
getDimensionPixelSize
(
height
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
statusBarHeight
==
0
)
{
int
resourceId
=
mContext
.
getResources
().
getIdentifier
(
"status_bar_height"
,
"dimen"
,
"android"
);
if
(
resourceId
>
0
)
{
statusBarHeight
=
mContext
.
getResources
().
getDimensionPixelSize
(
resourceId
);
}
}
if
(
statusBarHeight
==
0
)
{
Rect
rectangle
=
new
Rect
();
mWindow
.
getDecorView
().
getWindowVisibleDisplayFrame
(
rectangle
);
statusBarHeight
=
rectangle
.
top
;
}
return
statusBarHeight
;
}
/**
* 能否用自定义状态栏
*/
public
boolean
useCustomStatusBar
()
{
if
(!
canUseImmersive
())
{
return
false
;
}
if
(
isXiaoMiOpenHideFullScreenToggle
(
mContext
))
{
return
false
;
}
return
true
;
}
/**
* 获取小米手机刘海屏宽高 int[0] 为宽度 int[1] 为高度
*/
private
int
[]
getXiaoMiNotchSize
(
Context
context
)
{
int
[]
ret
=
new
int
[]{
0
,
0
};
int
resourceWidthId
=
context
.
getResources
().
getIdentifier
(
"notch_width"
,
"dimen"
,
"android"
);
if
(
resourceWidthId
>
0
)
{
ret
[
0
]
=
(
context
.
getResources
().
getDimensionPixelSize
(
resourceWidthId
))
+
10
;
}
int
resourceHeightId
=
context
.
getResources
().
getIdentifier
(
"notch_height"
,
"dimen"
,
"android"
);
if
(
resourceHeightId
>
0
)
{
ret
[
1
]
=
context
.
getResources
().
getDimensionPixelSize
(
resourceHeightId
)
+
30
;
}
return
ret
;
}
/**
* 获取华为手机刘海屏宽高 int[0] 为宽度 int[1] 为高度
*/
private
int
[]
getHuaWeiNotchSize
(
Context
context
)
{
int
[]
ret
=
new
int
[]{
0
,
0
};
try
{
ClassLoader
cl
=
context
.
getClassLoader
();
Class
HwNotchSizeUtil
=
cl
.
loadClass
(
"com.huawei.android.util.HwNotchSizeUtil"
);
Method
get
=
HwNotchSizeUtil
.
getMethod
(
"getNotchSize"
);
ret
=
(
int
[])
get
.
invoke
(
HwNotchSizeUtil
);
}
catch
(
ClassNotFoundException
e
)
{
Log
.
e
(
"test"
,
"getNotchSize ClassNotFoundException"
);
}
catch
(
NoSuchMethodException
e
)
{
Log
.
e
(
"test"
,
"getNotchSize NoSuchMethodException"
);
}
catch
(
Exception
e
)
{
Log
.
e
(
"test"
,
"getNotchSize Exception"
);
}
finally
{
return
ret
;
}
}
public
boolean
isXiaoMiPhone
()
{
return
Build
.
MANUFACTURER
.
equalsIgnoreCase
(
PHONE_FLAG_XIAO_MI
);
}
public
boolean
isHUAWEIPhone
()
{
return
Build
.
MANUFACTURER
.
equalsIgnoreCase
(
PHONE_FLAG_HUA_WEI
);
}
public
boolean
isOPPOPhone
()
{
return
Build
.
MANUFACTURER
.
equalsIgnoreCase
(
PHONE_FLAG_OPPO
);
}
public
boolean
isVivoPhone
()
{
return
Build
.
MANUFACTURER
.
equalsIgnoreCase
(
PHONE_FLAG_VIVO
);
}
/**
* 小米是否开启了隐藏全面屏的开关(系统设置里)
*/
public
boolean
isXiaoMiOpenHideFullScreenToggle
(
Context
context
)
{
return
ImmersionBar
.
hasNotchScreen
((
Activity
)
context
)
&&
isXiaoMiPhone
()
&&
Settings
.
Global
.
getInt
(
context
.
getContentResolver
(),
"force_black"
,
0
)
==
1
;
}
/**
* 获取当前屏幕的亮度
*
* @param context
* @return 返回是一个int值 在0 ~ 255之间
*/
public
int
getSystemBrightness
(
Context
context
)
{
int
nowBrightnessValue
=
0
;
try
{
nowBrightnessValue
=
Settings
.
System
.
getInt
(
context
.
getContentResolver
(),
Settings
.
System
.
SCREEN_BRIGHTNESS
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
nowBrightnessValue
;
}
/**
* 设置当前系统屏幕亮度值 0 ~ 255
*
* @param context
* @param paramInt 设置的值
*/
public
void
setSystemScreenBrightness
(
Context
context
,
int
paramInt
)
{
try
{
Settings
.
System
.
putInt
(
context
.
getContentResolver
(),
Settings
.
System
.
SCREEN_BRIGHTNESS
,
paramInt
);
}
catch
(
Exception
localException
)
{
localException
.
printStackTrace
();
}
}
/**
* 判断是否开启了自动亮度调节
* 自动 = 1 SCREEN_BRIGHTNESS_MODE_AUTOMATIC
* 手动 = 0 SCREEN_BRIGHTNESS_MODE_MANUAL
*
* @param context
* @return
*/
public
boolean
isAutoBrightness
(
Context
context
)
{
boolean
isAutoBrightness
=
false
;
try
{
isAutoBrightness
=
Settings
.
System
.
getInt
(
context
.
getContentResolver
(),
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE
)
==
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE_AUTOMATIC
;
}
catch
(
Settings
.
SettingNotFoundException
e
)
{
e
.
printStackTrace
();
}
return
isAutoBrightness
;
}
/**
* 改变App当前Window亮度
* lp.screenBrightness 范围 0.0 ~ 1.0之间
*
* @param brightness
* @param context activity的context
*/
public
void
changeAppBrightness
(
Context
context
,
float
brightness
)
{
Window
window
=
((
Activity
)
context
).
getWindow
();
WindowManager
.
LayoutParams
lp
=
window
.
getAttributes
();
if
(
brightness
==
-
1
)
{
lp
.
screenBrightness
=
WindowManager
.
LayoutParams
.
BRIGHTNESS_OVERRIDE_NONE
;
}
else
{
lp
.
screenBrightness
=
brightness
;
}
window
.
setAttributes
(
lp
);
}
/**
* 停止自动亮度调节
*
* @param context
*/
public
void
stopAutoBrightness
(
Context
context
)
{
Settings
.
System
.
putInt
(
context
.
getContentResolver
(),
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE
,
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE_MANUAL
);
}
/**
* 开启亮度自动调节
*
* @param context
*/
public
void
startAutoBrightness
(
Context
context
)
{
Settings
.
System
.
putInt
(
context
.
getContentResolver
(),
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE
,
Settings
.
System
.
SCREEN_BRIGHTNESS_MODE_AUTOMATIC
);
}
public
void
cleanup
()
{
mContext
.
getContentResolver
().
unregisterContentObserver
(
mBrightnessObserver
);
}
/**
* 设置降低屏幕亮度策略
*
* @param enable 是否打开
*/
public
void
enableScreenBrightnessDarkStrategy
(
boolean
enable
)
{
if
(
Utils
.
getInstance
().
isCharging
()
||
isAutoBrightness
(
mContext
))
{
return
;
}
if
(
enable
)
{
isUserChangeSystemBrightness
=
false
;
mCurrentSystemBrightness
=
getSystemBrightness
(
mContext
);
setSystemScreenBrightness
(
mContext
,
mCurrentSystemBrightness
/
2
);
mContext
.
getContentResolver
().
registerContentObserver
(
Settings
.
System
.
getUriFor
(
Settings
.
System
.
SCREEN_BRIGHTNESS
),
false
,
mBrightnessObserver
);
}
else
{
mContext
.
getContentResolver
().
unregisterContentObserver
(
mBrightnessObserver
);
if
(!
isUserChangeSystemBrightness
)
setSystemScreenBrightness
(
mContext
,
mCurrentSystemBrightness
);
}
}
/**
* 注册光观察者: context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), false, mBrightnessObserver);
* 应用销毁解观察者: context.getContentResolver().unregisterContentObserver(mBrightnessObserver);
* 如果开启自动亮度调节,获取系统亮度,是一个值,调节bar,获取系统亮度还是那个值
* 如果关闭自动亮度调节,获取的亮度是一个值,调节bar,获取系统亮度是调节后的值
* 如果开启自动亮度调节,此方法监听不到系统亮度变化
*/
private
ContentObserver
mBrightnessObserver
=
new
ContentObserver
(
new
Handler
())
{
@Override
public
void
onChange
(
boolean
selfChange
,
Uri
uri
)
{
super
.
onChange
(
selfChange
,
uri
);
isUserChangeSystemBrightness
=
true
;
}
};
public
Window
getWindow
()
{
return
mWindow
;
}
/**
* 获取屏幕宽 可用显示区域大小
*/
public
int
getScreenWidth
()
{
mDisplayMetrics
=
new
DisplayMetrics
();
mWindowManager
.
getDefaultDisplay
().
getMetrics
(
mDisplayMetrics
);
return
mDisplayMetrics
.
widthPixels
;
}
public
int
getScreenHeight
()
{
mDisplayMetrics
=
new
DisplayMetrics
();
mWindowManager
.
getDefaultDisplay
().
getMetrics
(
mDisplayMetrics
);
return
mDisplayMetrics
.
heightPixels
;
}
/**
* 获取横向屏幕可用显示区域最大宽度
*/
public
int
getHorizontalMaxWidth
()
{
int
screenWidthTwoFifths
=
getScreenWidth
()
*
2
/
5
;
if
(
screenWidthTwoFifths
>
mHorizontalMaxWidth
)
{
return
mHorizontalMaxWidth
;
}
else
{
return
screenWidthTwoFifths
;
}
}
/**
* 地图显示的高,获取的是正常竖屏的高
*/
public
int
getMapShowHeight
()
{
int
mapShowHeight
;
if
(
canUseImmersive
())
{
mapShowHeight
=
getRealScreenHeight
()
-
getNavigationBarHeight
();
}
else
{
mapShowHeight
=
getRealScreenHeight
()
-
getNavigationBarHeight
()
-
getStatusBarHeight
();
}
return
mapShowHeight
;
}
/**
* 通过反射拿到屏幕实际的高度(包括状态栏和导航栏),获取的是正常竖屏的高
*/
private
int
getRealScreenHeight
()
{
int
dpi
=
0
;
Display
display
=
((
Activity
)
mContext
).
getWindowManager
().
getDefaultDisplay
();
DisplayMetrics
dm
=
new
DisplayMetrics
();
@SuppressWarnings
(
"rawtypes"
)
Class
c
;
try
{
c
=
Class
.
forName
(
"android.view.Display"
);
@SuppressWarnings
(
"unchecked"
)
Method
method
=
c
.
getMethod
(
"getRealMetrics"
,
DisplayMetrics
.
class
);
method
.
invoke
(
display
,
dm
);
if
(
isScreenLandscape
())
{
dpi
=
dm
.
widthPixels
;
}
else
{
dpi
=
dm
.
heightPixels
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
dpi
==
0
)
{
if
(
isScreenLandscape
())
{
dpi
=
getScreenWidth
();
}
else
{
if
(
ImmersionBar
.
hasNotchScreen
((
Activity
)
mContext
))
{
dpi
=
getAvailableScreenHeight
()
+
getNotchHeight
()
+
getNavigationBarHeight
();
}
else
{
dpi
=
getAvailableScreenHeight
()
+
getStatusBarHeight
()
+
getNavigationBarHeight
();
}
}
}
return
dpi
;
}
/**
* 计算屏幕可用高度(此方法会受到软键盘 状态栏 底部导航栏的影响,不适合view自绘中调用,性能会有损耗)
* rect的top 是指 如果状态栏显示 则top值是状态栏高度 如果不显示则为0
* rect的bottom 是指 如果底部导航栏显示 bottom是屏幕的高度减去导航栏的高度 如果底部导航栏不显示 bottom的值是屏幕高度
*/
private
int
horizontalAvailableScreenHeight
,
verticalAvailableScreenHeight
;
private
int
getAvailableScreenHeight
()
{
if
(
isScreenLandscape
())
{
if
(
horizontalAvailableScreenHeight
==
0
)
{
Rect
rect
=
new
Rect
();
mWindow
.
getDecorView
().
getWindowVisibleDisplayFrame
(
rect
);
horizontalAvailableScreenHeight
=
rect
.
right
-
rect
.
left
;
}
return
horizontalAvailableScreenHeight
;
}
else
{
if
(
verticalAvailableScreenHeight
==
0
)
{
Rect
rect
=
new
Rect
();
mWindow
.
getDecorView
().
getWindowVisibleDisplayFrame
(
rect
);
verticalAvailableScreenHeight
=
rect
.
bottom
-
rect
.
top
;
}
return
verticalAvailableScreenHeight
;
}
}
/**
* 设置是否全屏
*/
public
void
enableFullScreen
(
boolean
enable
)
{
if
(
ImmersionBar
.
hasNotchScreen
((
Activity
)
mContext
))
{
setStatusBarVisible
(!
enable
);
}
else
{
if
(
enable
)
{
ImmersionBar
.
with
((
Activity
)
mContext
)
.
hideBar
(
BarHide
.
FLAG_HIDE_STATUS_BAR
)
.
init
();
}
else
{
ImmersionBar
.
with
((
Activity
)
mContext
)
.
hideBar
(
BarHide
.
FLAG_SHOW_BAR
)
.
init
();
}
}
}
/**
* 设置状态栏是否可见
*/
private
void
setStatusBarVisible
(
boolean
show
)
{
int
uiFlags
;
if
(
show
)
{
uiFlags
=
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
;
uiFlags
|=
0x00001000
;
}
else
{
uiFlags
=
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
|
View
.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
View
.
SYSTEM_UI_FLAG_FULLSCREEN
;
uiFlags
|=
0x00001000
;
}
mWindow
.
getDecorView
().
setSystemUiVisibility
(
uiFlags
);
}
/**
* 获取导航栏虚拟按键的高度,如果虚拟按键隐藏就返回0,否则返回虚拟按键的高度
*/
public
int
getNavigationBarHeight
()
{
if
(
isNavigationBarShow
())
{
return
calculateNavigationBarHeight
();
}
else
{
mNavigationBarHeight
=
0
;
return
mNavigationBarHeight
;
}
}
/**
* 获取忽略导航栏隐藏来获取导航栏的高,即算导航栏显示时候的高
*/
public
int
getNavigationBarHeightIgnoreHide
()
{
if
(
mNavigationBarHeight
!=
0
)
{
return
mNavigationBarHeight
;
}
else
{
return
calculateNavigationBarHeight
();
}
}
/**
* 计算虚拟按键的高度
*/
private
int
calculateNavigationBarHeight
()
{
if
(
mNavigationBarHeight
==
0
)
{
try
{
Class
<?>
clazz
=
Class
.
forName
(
"com.android.internal.R$dimen"
);
Object
object
=
clazz
.
newInstance
();
int
height
=
Integer
.
parseInt
(
clazz
.
getField
(
"navigation_bar_height"
).
get
(
object
).
toString
());
mNavigationBarHeight
=
mContext
.
getResources
().
getDimensionPixelSize
(
height
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
if
(
mNavigationBarHeight
==
0
)
{
Resources
res
=
mContext
.
getResources
();
int
resourceId
=
res
.
getIdentifier
(
"navigation_bar_height"
,
"dimen"
,
"android"
);
if
(
resourceId
>
0
)
{
mNavigationBarHeight
=
res
.
getDimensionPixelSize
(
resourceId
);
}
}
if
(
mNavigationBarHeight
==
0
)
{
Rect
rect
=
new
Rect
();
mWindow
.
getDecorView
().
getWindowVisibleDisplayFrame
(
rect
);
Point
realSize
=
new
Point
();
mWindowManager
.
getDefaultDisplay
().
getRealSize
(
realSize
);
mNavigationBarHeight
=
realSize
.
y
-
rect
.
bottom
;
}
return
mNavigationBarHeight
;
}
/**
* 是否保持屏幕常亮
*
* @param enable true为保持常亮
*/
public
void
enableKeepScreenOn
(
boolean
enable
)
{
if
(
enable
)
{
mWindow
.
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_KEEP_SCREEN_ON
);
}
else
{
mWindow
.
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_KEEP_SCREEN_ON
);
}
}
public
void
setNotchShowContent
(
boolean
isShow
)
{
setNotchShowContent
(
mWindow
,
isShow
);
}
/**
* 设置刘海区是否显示内容
*
* @param window 当前显示的window
* @param isShow 刘海区域是否显示内容,如果false即刘海区域变黑,不显示内容
*/
public
void
setNotchShowContent
(
Window
window
,
boolean
isShow
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
P
)
{
if
(
isShow
)
{
WindowManager
.
LayoutParams
lp
=
window
.
getAttributes
();
lp
.
layoutInDisplayCutoutMode
=
WindowManager
.
LayoutParams
.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
;
window
.
setAttributes
(
lp
);
}
else
{
WindowManager
.
LayoutParams
lp
=
window
.
getAttributes
();
lp
.
layoutInDisplayCutoutMode
=
WindowManager
.
LayoutParams
.
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
;
window
.
setAttributes
(
lp
);
}
}
}
/**
* 判断虚拟导航栏是否显示
*
* @return true(显示虚拟导航栏),false(不显示或不支持虚拟导航栏)
*/
private
boolean
isNavigationBarShow
()
{
//判断小米手机是否开启了全面屏,开启了,直接返回false
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
if
(
Settings
.
Global
.
getInt
(
mContext
.
getContentResolver
(),
"force_fsg_nav_bar"
,
0
)
!=
0
)
{
return
false
;
}
}
if
(
Build
.
VERSION
.
SDK_INT
==
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
||
isHUAWEIPhone
())
{
int
screenRealHeight
=
getRealScreenHeight
();
int
statusBarHeight
=
getStatusBarHeight
();
int
screenAvailableHeight
=
getAvailableScreenHeight
();
return
screenAvailableHeight
+
statusBarHeight
<
screenRealHeight
;
}
else
{
//其他手机根据屏幕真实高度与显示高度是否相同来判断
Display
d
=
mWindowManager
.
getDefaultDisplay
();
DisplayMetrics
realDisplayMetrics
=
new
DisplayMetrics
();
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
d
.
getRealMetrics
(
realDisplayMetrics
);
}
int
realHeight
=
realDisplayMetrics
.
heightPixels
;
int
realWidth
=
realDisplayMetrics
.
widthPixels
;
DisplayMetrics
displayMetrics
=
new
DisplayMetrics
();
d
.
getMetrics
(
displayMetrics
);
int
displayHeight
=
displayMetrics
.
heightPixels
;
int
displayWidth
=
displayMetrics
.
widthPixels
;
return
(
realWidth
-
displayWidth
)
>
0
||
(
realHeight
-
displayHeight
)
>
0
;
}
}
/**
* 判断手机是否使用了沉浸式
*
* @return true 表示使用了 false表示没使用
*/
public
boolean
canUseImmersive
()
{
return
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
;
}
/**
* 判断当前屏幕方向是否为横屏
*
* @param context 当前需要判断是否是横屏的Activity的Context
* @return true 横屏 false 竖屏
*/
public
boolean
isScreenLandscape
(
Context
context
)
{
Configuration
mConfiguration
=
context
.
getResources
().
getConfiguration
();
//获取设置的配置信息
int
ori
=
mConfiguration
.
orientation
;
//获取屏幕方向
return
ori
==
Configuration
.
ORIENTATION_LANDSCAPE
;
}
/**
* 判断当前屏幕横屏方向
*/
public
int
horizontalDirection
()
{
return
((
Activity
)
mContext
).
getWindowManager
().
getDefaultDisplay
().
getRotation
();
}
/**
* 判断当前屏幕方向是否为横屏,注意 此方法适用于关于MainActivity的横竖屏判断
*
* @return true 横屏 false 竖屏
*/
public
boolean
isScreenLandscape
()
{
return
isScreenLandscape
(
mContext
);
}
public
int
getDimen10Px
()
{
return
mContext
.
getResources
().
getDimensionPixelOffset
(
R
.
dimen
.
nz_px_10
);
}
public
int
getDimen20Px
()
{
return
mContext
.
getResources
().
getDimensionPixelOffset
(
R
.
dimen
.
nz_px_20
);
}
//主页面底部抽拉菜单适配刘海屏
public
int
getAdaptationLiuHaipingHeigh
()
{
if
(
getLiuHaiping
()
==
0
)
{
return
mContext
.
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
nz_px_56
);
}
return
getLiuHaiping
();
}
private
Drawable
mShadowDrawable
;
private
Rect
mDrawablePadding
;
public
Rect
getShadowBgRect
(
int
drawableResId
)
{
mShadowDrawable
=
mContext
.
getResources
().
getDrawable
(
drawableResId
);
mDrawablePadding
=
new
Rect
();
mShadowDrawable
.
getPadding
(
mDrawablePadding
);
return
mDrawablePadding
;
}
}
\ No newline at end of file
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/SpannableBuilder.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.content.Context
;
import
android.graphics.Typeface
;
import
android.text.Spannable
;
import
android.text.SpannableString
;
import
android.text.SpannableStringBuilder
;
import
android.text.Spanned
;
import
android.text.style.AbsoluteSizeSpan
;
import
android.text.style.ForegroundColorSpan
;
import
android.text.style.StyleSpan
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
public
class
SpannableBuilder
{
private
Context
context
;
private
List
<
SpanWrapper
>
list
;
private
SpannableBuilder
(
Context
context
)
{
this
.
context
=
context
;
this
.
list
=
new
ArrayList
<>();
}
public
SpannableBuilder
append
(
String
text
,
int
textSize
,
int
textColor
)
{
return
append
(
text
,
textSize
,
textColor
,
false
);
}
public
SpannableBuilder
append
(
String
text
,
int
textSize
,
int
textColor
,
boolean
isBold
)
{
list
.
add
(
new
SpanWrapper
(
text
,
textSize
,
textColor
,
isBold
));
return
this
;
}
public
Spannable
build
()
{
SpannableStringBuilder
textSpan
=
new
SpannableStringBuilder
();
int
start
=
0
;
int
end
=
0
;
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
SpanWrapper
wrapper
=
list
.
get
(
i
);
String
text
=
wrapper
.
getText
();
start
=
end
;
end
=
end
+
text
.
length
();
textSpan
.
append
(
text
);
AbsoluteSizeSpan
sizeSpan
=
new
AbsoluteSizeSpan
(
getContext
().
getResources
().
getDimensionPixelSize
(
wrapper
.
getTextSize
()));
ForegroundColorSpan
colorSpan
=
new
ForegroundColorSpan
(
getContext
().
getResources
().
getColor
(
wrapper
.
getTextColor
()));
if
(
wrapper
.
isBold
)
{
textSpan
.
setSpan
(
new
StyleSpan
(
Typeface
.
BOLD
),
start
,
end
,
Spannable
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
}
textSpan
.
setSpan
(
sizeSpan
,
start
,
end
,
Spannable
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
textSpan
.
setSpan
(
colorSpan
,
start
,
end
,
Spannable
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
}
return
textSpan
;
}
public
static
SpannableBuilder
create
(
Context
context
)
{
return
new
SpannableBuilder
(
context
);
}
public
Context
getContext
()
{
return
context
;
}
private
class
SpanWrapper
{
String
text
;
int
textSize
;
int
textColor
;
boolean
isBold
;
public
SpanWrapper
(
String
text
,
int
textSize
,
int
textColor
,
boolean
isBold
)
{
this
.
text
=
text
;
this
.
textSize
=
textSize
;
this
.
textColor
=
textColor
;
this
.
isBold
=
isBold
;
}
public
String
getText
()
{
return
text
;
}
public
void
setText
(
String
text
)
{
this
.
text
=
text
;
}
public
int
getTextSize
()
{
return
textSize
;
}
public
void
setTextSize
(
int
textSize
)
{
this
.
textSize
=
textSize
;
}
public
int
getTextColor
()
{
return
textColor
;
}
public
void
setTextColor
(
int
textColor
)
{
this
.
textColor
=
textColor
;
}
public
boolean
isBold
()
{
return
isBold
;
}
public
void
setBold
(
boolean
bold
)
{
isBold
=
bold
;
}
}
public
static
SpannableString
matcherSearchText
(
int
color
,
String
text
,
String
keyword
)
{
SpannableString
ss
=
new
SpannableString
(
text
);
Pattern
pattern
=
Pattern
.
compile
(
keyword
);
Matcher
matcher
=
pattern
.
matcher
(
ss
);
while
(
matcher
.
find
())
{
int
start
=
matcher
.
start
();
int
end
=
matcher
.
end
();
ss
.
setSpan
(
new
ForegroundColorSpan
(
color
),
start
,
end
,
Spanned
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
}
return
ss
;
}
/**
* 高亮显示关键字
*
* @param text 文本
* @param keyword 关键字
* @param color 关键字高亮颜色
*/
public
static
SpannableString
highlightKeyword
(
CharSequence
text
,
String
keyword
,
int
color
)
{
return
highlightKeyword
(
text
,
keyword
,
color
,
true
);
}
/**
* 高亮显示关键字
*
* @param text 文本
* @param keyword 关键字
* @param color 关键字高亮颜色
* @param caseInsensitive 是否忽略大小写
*/
public
static
SpannableString
highlightKeyword
(
CharSequence
text
,
String
keyword
,
int
color
,
boolean
caseInsensitive
)
{
SpannableString
ss
=
new
SpannableString
(
text
);
// 转换后可以把特殊符号变成普通字符串,防止正则表达式出现问题
keyword
=
Pattern
.
quote
(
keyword
);
Pattern
pattern
=
caseInsensitive
?
Pattern
.
compile
(
keyword
,
Pattern
.
CASE_INSENSITIVE
)
:
Pattern
.
compile
(
keyword
);
Matcher
matcher
=
pattern
.
matcher
(
ss
);
while
(
matcher
.
find
())
{
int
start
=
matcher
.
start
();
int
end
=
matcher
.
end
();
ss
.
setSpan
(
new
ForegroundColorSpan
(
color
),
start
,
end
,
Spanned
.
SPAN_INCLUSIVE_INCLUSIVE
);
}
return
ss
;
}
public
void
clear
()
{
list
.
clear
();
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/TimeBean.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
/**
* 描述时间
*/
public
class
TimeBean
{
public
int
hour
;
public
int
minute
;
public
TimeBean
(
int
hour
,
int
minute
)
{
this
.
hour
=
hour
;
this
.
minute
=
minute
;
}
@Override
public
String
toString
()
{
return
"TimeBean{"
+
"hour="
+
hour
+
", minute="
+
minute
+
'}'
;
}
}
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/TmcStatus.java
0 → 100644
View file @
c5c9915f
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
/**
* 路况类
*/
public
class
TmcStatus
{
public
static
final
int
TMC_STATUS_UNKNOWN
=
0
;
public
static
final
int
TMC_STATUS_FREE
=
1
;
public
static
final
int
TMC_STATUS_SLOW
=
2
;
public
static
final
int
TMC_STATUS_HEAVY
=
3
;
public
static
final
int
TMC_STATUS_BLOCK
=
4
;
public
static
final
int
TMC_STATUS_NONE
=
5
;
private
TmcStatus
()
{
}
}
\ No newline at end of file
arcgislib/src/main/java/cn/com/founder/arcgislib/widget/navi/Utils.java
0 → 100644
View file @
c5c9915f
/*********************************************************************************************************************************
* NaviCore Corporate MIT License 0.1
* Copyright (c) 2019 GIS Core R&D Department, NavInfo Corp.
*
* Permission is hereby granted, free of charge, to any entity within the corporation(Entity) obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction, including without
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit Entities to whom the Software is furnished to do so, subject to the following conditions:
*
* 1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. and
* 2. The above copyright notice, this permission notice and the acknowledgments below shall be displayed in UI or web pages
* if the Software is redistributed in binary form or as web service.
*
* Acknowledgments: "This work uses NaviZeroAndroid provided by GIS Core R&D Department, NavInfo Corp."
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* You may also get a copy of the license at http://navicore.cn/license/NC_MIT_0.1
**********************************************************************************************************************************/
package
cn
.
com
.
founder
.
arcgislib
.
widget
.
navi
;
import
android.annotation.TargetApi
;
import
android.app.Activity
;
import
android.app.ActivityManager
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.IntentFilter
;
import
android.content.pm.ActivityInfo
;
import
android.content.pm.PackageInfo
;
import
android.content.pm.PackageManager
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.graphics.Paint
;
import
android.graphics.Point
;
import
android.graphics.PorterDuff
;
import
android.graphics.PorterDuffXfermode
;
import
android.media.AudioManager
;
import
android.os.BatteryManager
;
import
android.os.Build
;
import
android.os.CountDownTimer
;
import
android.os.Handler
;
import
android.os.StatFs
;
import
android.text.TextUtils
;
import
android.util.Base64
;
import
android.view.View
;
import
android.view.animation.AlphaAnimation
;
import
android.view.animation.Animation
;
import
android.view.animation.AnimationSet
;
import
android.view.animation.TranslateAnimation
;
import
android.view.inputmethod.InputMethodManager
;
import
android.widget.EditText
;
import
android.widget.Toast
;
import
com.minedata.minenavi.SDKInitializer
;
import
com.minedata.minenavi.map.MineMap
;
import
com.minedata.minenavi.mapdal.DistanceStringInfo
;
import
com.minedata.minenavi.mapdal.MineNaviUtil
;
import
com.minedata.minenavi.mapdal.NativeEnv
;
import
java.io.BufferedReader
;
import
java.io.FileReader
;
import
java.security.MessageDigest
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Random
;
import
java.util.Timer
;
import
java.util.TimerTask
;
public
class
Utils
{
private
Context
mContext
;
private
AudioManager
mAudioManager
;
private
PackageManager
mPackageManager
;
private
float
mDpiFactor
=
2.0f
;
private
boolean
mIsInited
=
false
;
private
Timer
mTimer
;
private
Context
mApplicationContext
;
private
CountDownTimer
mCountDownTimer
;
private
static
class
SingletonHolder
{
public
static
final
Utils
instance
=
new
Utils
();
}
public
static
Utils
getInstance
()
{
return
SingletonHolder
.
instance
;
}
public
void
init
(
Context
context
)
{
if
(
mIsInited
)
{
return
;
}
mContext
=
context
;
mApplicationContext
=
context
.
getApplicationContext
();
mTimer
=
new
Timer
();
mAudioManager
=
(
AudioManager
)
mContext
.
getSystemService
(
Context
.
AUDIO_SERVICE
);
mPackageManager
=
mContext
.
getPackageManager
();
mDpiFactor
=
context
.
getResources
().
getDisplayMetrics
().
density
;
mIsInited
=
true
;
}
/**
* 获取当前音量值
*/
public
int
getCurrentVolume
()
{
return
mAudioManager
.
getStreamVolume
(
AudioManager
.
STREAM_MUSIC
);
}
/**
* 获取音量最大值
*/
public
int
getMaxVolume
()
{
return
mAudioManager
.
getStreamMaxVolume
(
AudioManager
.
STREAM_MUSIC
);
}
/**
* 设置当前的音量
*/
public
void
setVolume
(
int
volumeValue
)
{
mAudioManager
.
setStreamVolume
(
AudioManager
.
STREAM_MUSIC
,
volumeValue
,
AudioManager
.
FLAG_PLAY_SOUND
);
//设置值为Val
}
/**
* APP是否处于前台
*/
public
boolean
isAppOnForeground
()
{
ActivityManager
activityManager
=
(
ActivityManager
)
mContext
.
getApplicationContext
().
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
String
packageName
=
mContext
.
getApplicationContext
().
getPackageName
();
List
<
ActivityManager
.
RunningAppProcessInfo
>
appProcesses
=
activityManager
.
getRunningAppProcesses
();
if
(
appProcesses
==
null
)
return
false
;
for
(
ActivityManager
.
RunningAppProcessInfo
appProcess
:
appProcesses
)
{
if
(
appProcess
.
processName
.
equals
(
packageName
)
&&
appProcess
.
importance
==
ActivityManager
.
RunningAppProcessInfo
.
IMPORTANCE_FOREGROUND
)
{
return
true
;
}
}
return
false
;
}
/**
* 判断设备是否正在充电
*/
public
boolean
isCharging
()
{
IntentFilter
ifilter
=
new
IntentFilter
(
Intent
.
ACTION_BATTERY_CHANGED
);
Intent
batteryStatus
=
mContext
.
registerReceiver
(
null
,
ifilter
);
int
status
=
batteryStatus
.
getIntExtra
(
BatteryManager
.
EXTRA_STATUS
,
-
1
);
boolean
isCharging
=
status
==
BatteryManager
.
BATTERY_STATUS_CHARGING
||
status
==
BatteryManager
.
BATTERY_STATUS_FULL
;
return
isCharging
;
}
/**
* 获取屏幕的高,如果横屏的话,返回的高就是屏幕的宽,如果是竖屏的话,返回的高就是屏幕的高,获取的高是从状态栏到导航栏整体的高
*
* @param activity 当前的activity
* @return 屏幕的高
*/
@TargetApi
(
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
public
int
getWindowHeight
(
Activity
activity
)
{
Point
realSize
=
new
Point
();
activity
.
getWindowManager
().
getDefaultDisplay
().
getRealSize
(
realSize
);
return
realSize
.
y
;
}
/**
* 获取屏幕的高,如果横屏的话,返回的高就是屏幕的宽,如果是竖屏的话,返回的高就是屏幕的高,获取的高是从状态栏到导航栏整体的高
*
* @param activity 当前的activity
* @return 屏幕的高
*/
@TargetApi
(
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
public
int
getWindowWidth
(
Activity
activity
)
{
Point
realSize
=
new
Point
();
activity
.
getWindowManager
().
getDefaultDisplay
().
getRealSize
(
realSize
);
return
realSize
.
x
;
}
/**
* 平移动画
*/
private
TranslateAnimation
mTranslateAnimation
;
public
void
translateAnimation
(
View
view
,
float
fromX
,
float
toX
,
float
fromY
,
float
toY
,
long
duration
,
Animation
.
AnimationListener
animationListener
,
boolean
isFillAfter
)
{
mTranslateAnimation
=
new
TranslateAnimation
(
Animation
.
RELATIVE_TO_SELF
,
fromX
,
Animation
.
RELATIVE_TO_SELF
,
toX
,
Animation
.
RELATIVE_TO_SELF
,
fromY
,
Animation
.
RELATIVE_TO_SELF
,
toY
);
mTranslateAnimation
.
setDuration
(
duration
);
mTranslateAnimation
.
setFillAfter
(
isFillAfter
);
if
(
animationListener
!=
null
)
{
mTranslateAnimation
.
setAnimationListener
(
animationListener
);
}
view
.
startAnimation
(
mTranslateAnimation
);
}
/**
* 混合动画动画
*/
public
void
translateAnimationWithAbsolute
(
View
view
,
float
fromAlpha
,
float
toAlpha
,
long
alaphDuration
,
long
startTime
,
float
fromX
,
float
toX
,
float
fromY
,
float
toY
,
long
translateDuration
,
long
animationSetDuration
,
Animation
.
AnimationListener
animationListener
,
boolean
isFillAfter
)
{
//途径点1——————————添加文字移动平移动画 333
AnimationSet
animationSet
=
new
AnimationSet
(
true
);
AlphaAnimation
animationa
=
new
AlphaAnimation
(
fromAlpha
,
toAlpha
);
animationa
.
setDuration
(
alaphDuration
);
animationa
.
setStartTime
(
startTime
);
animationSet
.
addAnimation
(
animationa
);
TranslateAnimation
translateAnimation
=
new
TranslateAnimation
(
Animation
.
ABSOLUTE
,
fromX
,
Animation
.
ABSOLUTE
,
toX
,
Animation
.
ABSOLUTE
,
fromY
,
Animation
.
ABSOLUTE
,
toY
);
translateAnimation
.
setDuration
(
translateDuration
);
animationSet
.
addAnimation
(
translateAnimation
);
animationSet
.
setDuration
(
animationSetDuration
);
animationSet
.
setAnimationListener
(
animationListener
);
animationSet
.
setFillAfter
(
isFillAfter
);
view
.
startAnimation
(
animationSet
);
}
public
boolean
isTranslateAnimationHasEnded
()
{
if
(
mTranslateAnimation
==
null
)
{
return
true
;
}
return
mTranslateAnimation
.
hasEnded
();
}
/**
* 地图是否是2d模式
*/
public
final
boolean
isMap2dStyle
(
MineMap
mineMap
)
{
return
mineMap
.
getElevation
()
==
90
;
}
/**
* 地图是否是3d模式
*/
public
final
boolean
isMap3dStyle
(
MineMap
mineMap
)
{
return
mineMap
.
getElevation
()
!=
90
;
}
/**
* 延时操作
*
* @param runnable
* @param delayed
*/
private
Handler
delayedViewOperateHandler
=
new
Handler
();
public
void
doDelayedViewOperate
(
Runnable
runnable
,
long
delayed
)
{
delayedViewOperateHandler
.
postDelayed
(
runnable
,
delayed
);
}
public
Handler
getDelayedViewOperateHandler
()
{
return
delayedViewOperateHandler
;
}
public
void
cleanup
()
{
if
(
mTimer
!=
null
)
{
mTimer
.
cancel
();
mTimer
=
null
;
}
}
/**
* 秒转换成分钟,向上取整
*
* @param secondTime 秒
* @return 取整后的分钟
*/
public
final
int
second2Minute
(
int
secondTime
)
{
return
(
secondTime
+
59
)
/
60
;
}
/**
* 将以秒为单位的时间格式化
*
* @param secondTime 秒
* @return 得到格式化的时间
*/
public
String
formatTime
(
int
secondTime
)
{
String
sTotalTime
;
int
minutes
=
second2Minute
(
secondTime
);
if
(
minutes
<
60
)
{
sTotalTime
=
minutes
+
"分钟"
;
}
else
{
int
remainMin
=
minutes
%
60
;
sTotalTime
=
minutes
/
60
+
"小时"
+
(
remainMin
==
0
?
""
:
remainMin
+
"分"
);
}
return
sTotalTime
;
}
/**
* 格式化到千米,如果距离不小于100km或整千米,保留整数;否则保留小数点后一位,比如 110000 -> 110,8000 -> 8, 8001 -> 8, 800 -> 0.8, 99 -> 0
*
* @param distance 距离,单位:米
* @return 格式化后以千米表示的结果,不包含单位
*/
public
String
formatDistanceToKm
(
int
distance
)
{
String
distanceValue
;
if
(
distance
>=
100000
||
distance
%
1000
==
0
)
{
distanceValue
=
String
.
valueOf
(
distance
/
1000
);
}
else
{
distanceValue
=
String
.
format
(
Locale
.
getDefault
(),
"%.1f"
,
(
distance
/
100
)
/
10.0
);
}
return
distanceValue
;
}
public
DistanceBean
formatDistance
(
int
distance
,
boolean
isEnglishDistanceUnit
)
{
DistanceStringInfo
distanceStringInfo
=
MineNaviUtil
.
distance2String
(
distance
,
isEnglishDistanceUnit
?
MineNaviUtil
.
DistanceUnit
.
english
:
MineNaviUtil
.
DistanceUnit
.
normal
,
false
);
String
distanceValue
=
""
;
String
distanceUnit
=
""
;
switch
(
distanceStringInfo
.
unit
)
{
case
MineNaviUtil
.
GisUnit
.
m
:
distanceUnit
=
isEnglishDistanceUnit
?
"m"
:
"米"
;
break
;
case
MineNaviUtil
.
GisUnit
.
km
:
distanceUnit
=
isEnglishDistanceUnit
?
"km"
:
"公里"
;
break
;
case
MineNaviUtil
.
GisUnit
.
mi
:
distanceUnit
=
isEnglishDistanceUnit
?
"mile"
:
"英里"
;
break
;
case
MineNaviUtil
.
GisUnit
.
ft
:
distanceUnit
=
isEnglishDistanceUnit
?
"ft"
:
"英尺"
;
break
;
}
distanceValue
=
distanceStringInfo
.
distanceString
.
split
(
distanceUnit
)[
0
];
return
new
DistanceBean
(
distanceValue
,
distanceUnit
);
}
public
TimeBean
calcTimeBean
(
int
time
)
{
int
totalMinute
=
(
time
+
59
)
/
60
;
int
timeHour
=
totalMinute
/
60
;
int
timeMinute
=
totalMinute
%
60
;
return
new
TimeBean
(
timeHour
,
timeMinute
);
}
/**
* 弹出/隐藏键盘
*/
public
void
enableInputMethod
(
boolean
enable
,
EditText
editText
)
{
InputMethodManager
inputManager
=
(
InputMethodManager
)
mContext
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
if
(
enable
)
{
//弹出键盘
inputManager
.
toggleSoftInput
(
0
,
InputMethodManager
.
HIDE_NOT_ALWAYS
);
}
else
{
//隐藏键盘
inputManager
.
hideSoftInputFromWindow
(
editText
.
getWindowToken
(),
0
);
}
}
/**
* 弹出/隐藏键盘 : 防止焦点丢失
*/
public
void
enableInputMethodWithFocus
(
boolean
enable
,
EditText
editText
)
{
InputMethodManager
inputManager
=
(
InputMethodManager
)
mContext
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
editText
.
setFocusable
(
enable
);
editText
.
setFocusableInTouchMode
(
enable
);
editText
.
requestFocus
();
if
(
enable
)
{
//弹出键盘
editText
.
requestFocus
();
inputManager
.
showSoftInput
(
editText
,
0
);
}
else
{
//隐藏键盘
inputManager
.
hideSoftInputFromWindow
(
editText
.
getWindowToken
(),
0
);
}
}
/**
* 光标移到文字后
*/
public
void
setSelectionEnd
(
EditText
editText
)
{
if
(
editText
!=
null
)
{
String
b
=
editText
.
getText
().
toString
();
editText
.
setSelection
(
b
.
length
());
}
}
/**
* 无焦点情况下隐藏键盘
*/
public
void
hideKeyboard
(
Context
context
)
{
Activity
activity
=
(
Activity
)
context
;
InputMethodManager
imm
=
(
InputMethodManager
)
mContext
.
getSystemService
(
Context
.
INPUT_METHOD_SERVICE
);
View
v
=
activity
.
getWindow
().
peekDecorView
();
if
(
null
!=
v
)
{
imm
.
hideSoftInputFromWindow
(
v
.
getWindowToken
(),
0
);
}
}
public
String
getStrDistance
(
Point
point1
,
Point
point2
)
{
int
distance
=
MineNaviUtil
.
distance
(
point1
,
point2
);
return
MineNaviUtil
.
distance2String
(
distance
,
MineNaviUtil
.
DistanceUnit
.
normal
,
false
).
distanceString
;
}
public
int
dp2Px
(
float
dp
)
{
return
(
int
)
(
dp
*
mDpiFactor
+
0.5f
);
}
public
int
px2Dp
(
int
px
)
{
return
(
int
)
(
px
/
mDpiFactor
+
0.5f
);
}
/**
* 判断系统当前是24小时制还是 12小时制
*/
public
boolean
is24Hour
()
{
return
android
.
text
.
format
.
DateFormat
.
is24HourFormat
(
mContext
);
}
/**
* 将流量大小(B)格式化为显示文本,规则如下:<br>
* 1. 小于1K时,显示xxB,例如2B<br>
* 2. 小于1M时,显示xxKB,例如250KB<br>
* 3. 小于1G时,显示xxMB,例如250MB<br>
* 4. 不小于1G时,显示xx.xGB,例如1.0GB, 10.5GB
*
* @param size 流量大小,单位:字节
*/
public
String
formatTrafficDataSize
(
long
size
)
{
if
(
size
<
1024
)
{
return
size
+
"B"
;
}
else
if
(
size
<
1024
*
1024
)
{
return
size
/
1024
+
"KB"
;
}
else
if
(
size
<
10
*
1024
*
1024
)
{
return
String
.
format
(
"%.1fM"
,
size
/
(
1024.0
*
1024
));
}
else
if
(
size
<
1024L
*
1024
*
1024
)
{
return
size
/
(
1024
*
1024
)
+
"MB"
;
}
else
{
return
String
.
format
(
"%.1fGB"
,
size
/
(
1024.0
*
1024
*
1024
));
}
}
/**
* 获取版本号名字
*/
public
String
getVerName
()
{
String
verName
=
""
;
try
{
verName
=
mPackageManager
.
getPackageInfo
(
mApplicationContext
.
getPackageName
(),
0
).
versionName
;
}
catch
(
PackageManager
.
NameNotFoundException
e
)
{
e
.
printStackTrace
();
}
return
verName
;
}
/**
* 获取版本号
*/
public
int
getVersionCode
()
{
int
versionCode
=
0
;
try
{
versionCode
=
mPackageManager
.
getPackageInfo
(
mApplicationContext
.
getPackageName
(),
0
).
versionCode
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
versionCode
;
}
/**
* 获取app名字
*/
public
String
getAppName
()
{
String
appName
=
""
;
try
{
PackageInfo
packageInfo
=
mPackageManager
.
getPackageInfo
(
mApplicationContext
.
getPackageName
(),
0
);
appName
=
packageInfo
.
applicationInfo
.
loadLabel
(
mPackageManager
).
toString
();
}
catch
(
PackageManager
.
NameNotFoundException
e
)
{
e
.
printStackTrace
();
}
return
appName
;
}
/**
* 全角转半角
*
* @return 半角字符串
*/
public
String
toDBC
(
String
input
)
{
char
c
[]
=
input
.
toCharArray
();
for
(
int
i
=
0
;
i
<
c
.
length
;
i
++)
{
if
(
c
[
i
]
==
'\u3000'
)
{
c
[
i
]
=
' '
;
}
else
if
(
c
[
i
]
>
'\
uFF00
'
&&
c
[
i
]
<
'\
uFF5F
'
)
{
c
[
i
]
=
(
char
)
(
c
[
i
]
-
65248
);
}
}
return
new
String
(
c
);
}
/**
* 系统Toast
*/
public
void
showToast
(
Context
context
,
String
msg
)
{
Toast
toast
=
Toast
.
makeText
(
context
,
msg
,
Toast
.
LENGTH_SHORT
);
toast
.
setText
(
msg
);
toast
.
show
();
}
public
void
scheduleTimerTask
(
TimerTask
timerTask
,
long
time
)
{
if
(
mTimer
!=
null
&&
timerTask
!=
null
)
{
mTimer
.
schedule
(
timerTask
,
time
);
}
}
/**
* 软件运行环境是否是手机
*
* @return
*/
public
boolean
isMobilePhone
()
{
try
{
if
(
ScreenUtil
.
getInstance
().
isScreenLandscape
()
&&
getTotalRam
(
mContext
)
<=
2.0f
&&
getSdcardAvailableSize
(
SDKInitializer
.
getAppPath
())
<
(
25L
*
1024
*
1024
*
1024
))
{
return
false
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
true
;
}
/**
* 根据包名获取当前数据存储的路径后缀
*/
public
String
getCurrentStoragePathSuffix
()
{
String
suffix
=
""
;
if
(
isTestVersion
())
{
suffix
=
"/mapbar/NaviZero"
;
}
else
if
(
isReleaseVersion
())
{
suffix
=
"/mapbar/NaviZeroRelease"
;
}
return
suffix
;
}
public
boolean
isTestVersion
()
{
String
packageName
=
mContext
.
getPackageName
();
return
TextUtils
.
equals
(
"com.mapbar.navigation.zero"
,
packageName
);
}
public
boolean
isReleaseVersion
()
{
String
packageName
=
mContext
.
getPackageName
();
return
TextUtils
.
equals
(
"com.mapbar.navigation.zero.release"
,
packageName
);
}
public
String
getLoginAppName
()
{
return
isTestVersion
()
?
"naviZeroBeta"
:
"naviZeroRelease"
;
}
/**
* 获取SD卡大小
*
* @param sdcardPath
* @return
*/
public
long
getSdcardAvailableSize
(
String
sdcardPath
)
{
long
size
=
0
;
StatFs
statFs
=
new
StatFs
(
sdcardPath
);
int
blockSize
=
statFs
.
getBlockSize
();
int
totalBlocks
=
statFs
.
getBlockCount
();
size
=
(
long
)
totalBlocks
*
blockSize
;
return
size
;
}
public
float
getTotalRam
(
Context
context
)
{
String
path
=
"/proc/meminfo"
;
String
firstLine
=
null
;
float
totalRam
=
0
;
try
{
FileReader
fileReader
=
new
FileReader
(
path
);
BufferedReader
br
=
new
BufferedReader
(
fileReader
,
8192
);
firstLine
=
br
.
readLine
().
split
(
"\\s+"
)[
1
];
br
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
if
(
firstLine
!=
null
)
{
totalRam
=
Float
.
valueOf
(
firstLine
)
/
(
1024
*
1024
);
}
return
totalRam
;
}
public
Bitmap
createCircleBitmap
(
Bitmap
resource
)
{
//获取图片的宽度
int
width
=
resource
.
getWidth
();
Paint
paint
=
new
Paint
();
//设置抗锯齿
paint
.
setAntiAlias
(
true
);
//创建一个与原bitmap一样宽度的正方形bitmap
Bitmap
circleBitmap
=
Bitmap
.
createBitmap
(
width
,
width
,
Bitmap
.
Config
.
ARGB_8888
);
//以该bitmap为低创建一块画布
Canvas
canvas
=
new
Canvas
(
circleBitmap
);
//以(width/2, width/2)为圆心,width/2为半径画一个圆
canvas
.
drawCircle
(
width
/
2
,
width
/
2
,
width
/
2
,
paint
);
//设置画笔为取交集模式
paint
.
setXfermode
(
new
PorterDuffXfermode
(
PorterDuff
.
Mode
.
SRC_IN
));
//裁剪图片
canvas
.
drawBitmap
(
resource
,
0
,
0
,
paint
);
return
circleBitmap
;
}
private
SimpleDateFormat
mSimpleDateFormat
;
/**
* local时间转换成UTC时间
*
* @param date 时间格式 例: 2019-5-21 14:12:38
* @return 返回格式化好的时间 例: 2019-5-21 22:12:38
*/
public
String
formatLocalDate
(
String
date
)
{
if
(
mSimpleDateFormat
==
null
)
{
mSimpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
}
Date
localDate
=
null
;
try
{
localDate
=
mSimpleDateFormat
.
parse
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
long
localTimeInMillis
=
localDate
.
getTime
()
+
60
*
60
*
8
*
1000
;
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTimeInMillis
(
localTimeInMillis
);
return
mSimpleDateFormat
.
format
(
calendar
.
getTime
());
}
/**
* /**
* 使用SHA1算法对字符串进行加密
*
* @param str 要签名的字符串
* @return SHA1 签名后的内容
*/
public
static
String
sha1Digest
(
String
str
)
{
if
(
str
==
null
||
str
.
length
()
==
0
)
{
return
null
;
}
char
hexDigits
[]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
};
try
{
MessageDigest
mdTemp
=
MessageDigest
.
getInstance
(
"SHA1"
);
mdTemp
.
update
(
str
.
getBytes
(
"UTF-8"
));
byte
[]
md
=
mdTemp
.
digest
();
int
j
=
md
.
length
;
char
buf
[]
=
new
char
[
j
*
2
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
j
;
i
++)
{
byte
byte0
=
md
[
i
];
buf
[
k
++]
=
hexDigits
[
byte0
>>>
4
&
0xf
];
buf
[
k
++]
=
hexDigits
[
byte0
&
0xf
];
}
return
new
String
(
buf
);
}
catch
(
Exception
e
)
{
return
null
;
}
}
/**
* 随机字符串
*
* @return 随机字符串
*/
public
static
String
randomString
()
{
String
str
=
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
;
Random
random
=
new
Random
();
StringBuffer
sb
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
int
number
=
random
.
nextInt
(
str
.
length
());
char
charAt
=
str
.
charAt
(
number
);
sb
.
append
(
charAt
);
}
return
sb
.
toString
();
}
/**
* 开启横竖屏模式
*
* @param activity 需要开启横竖屏的activity
* @param isOpen 是否打开
*/
public
void
enableHorizontalAndVerticalScreenMode
(
Activity
activity
,
boolean
isOpen
)
{
activity
.
setRequestedOrientation
(
isOpen
?
ActivityInfo
.
SCREEN_ORIENTATION_UNSPECIFIED
:
ActivityInfo
.
SCREEN_ORIENTATION_PORTRAIT
);
}
/**
* 开启横竖屏模式
*
* @param isOpen 是否打开
*/
public
void
enableHorizontalAndVerticalScreenMode
(
boolean
isOpen
)
{
enableHorizontalAndVerticalScreenMode
((
Activity
)
mContext
,
isOpen
);
}
/**
* 是否有网络连接
*
* @return
*/
public
boolean
isHaveNetwork
()
{
int
netWorkState
=
NativeEnv
.
getNetworkStatus
(
mContext
);
if
(
netWorkState
==
NativeEnv
.
NetworkStatus
.
unavailable
)
{
return
false
;
}
return
true
;
}
public
boolean
isNumber
(
String
str
)
{
for
(
int
i
=
str
.
length
();
--
i
>=
0
;
)
{
int
chr
=
str
.
charAt
(
i
);
if
(
chr
<
48
||
chr
>
57
)
return
false
;
}
return
true
;
}
/***
* MD5加密
*/
public
static
String
string2MD5
(
String
inStr
)
{
MessageDigest
md5
=
null
;
try
{
md5
=
MessageDigest
.
getInstance
(
"MD5"
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
e
.
toString
());
e
.
printStackTrace
();
return
""
;
}
byte
[]
md5Bytes
=
md5
.
digest
(
inStr
.
getBytes
());
StringBuffer
hexValue
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
md5Bytes
.
length
;
i
++)
{
int
val
=
((
int
)
md5Bytes
[
i
])
&
0xff
;
if
(
val
<
16
)
hexValue
.
append
(
"0"
);
hexValue
.
append
(
Integer
.
toHexString
(
val
));
}
return
hexValue
.
toString
().
toUpperCase
();
}
public
static
String
base64
(
String
str
)
{
return
Base64
.
encodeToString
(
str
.
getBytes
(),
Base64
.
DEFAULT
);
}
public
static
String
location2String
(
Point
pt
)
{
return
String
.
format
(
"%.5f,%.5f"
,
pt
.
x
/
100000.0
,
pt
.
y
/
100000.0
);
}
public
static
Point
string2Location
(
String
str
)
{
try
{
String
[]
parts
=
str
.
split
(
","
);
return
new
Point
((
int
)
(
Float
.
valueOf
(
parts
[
0
])
*
100000
),
(
int
)
(
Float
.
valueOf
(
parts
[
1
])
*
100000
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
arcgislib/src/main/res/drawable-xhdpi/icon_navi_line.png
0 → 100644
View file @
c5c9915f
1.24 KB
arcgislib/src/main/res/drawable-xhdpi/icon_right_black_arrow.png
0 → 100644
View file @
c5c9915f
459 Bytes
arcgislib/src/main/res/drawable-xhdpi/icon_route_text_start.png
0 → 100644
View file @
c5c9915f
1.82 KB
arcgislib/src/main/res/drawable-xhdpi/navi_launcher.png
0 → 100644
View file @
c5c9915f
115 KB
arcgislib/src/main/res/drawable-xhdpi/signal_light_horizontal.png
0 → 100644
View file @
c5c9915f
447 Bytes
arcgislib/src/main/res/drawable/naving_exit_port_bg.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<solid
android:color=
"#FF34A42B"
/>
<corners
android:radius=
"@dimen/nz_px_4"
/>
</shape>
\ No newline at end of file
arcgislib/src/main/res/drawable/naving_view_corner_bg.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<corners
android:radius=
"10dip"
/>
<solid
android:color=
"@color/colorHalfTrans"
/>
</shape>
\ No newline at end of file
arcgislib/src/main/res/layout/layout_navi_board.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/ll_navingInfoTopBar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/naving_view_corner_bg"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
>
<LinearLayout
android:id=
"@+id/ll_corner_detail"
android:layout_width=
"@dimen/nz_px_300"
android:layout_height=
"260dp"
android:orientation=
"vertical"
>
<com.minedata.minenavi.navi.TurnIconView
android:id=
"@+id/turnIconView"
android:layout_width=
"@dimen/nz_px_220"
android:layout_height=
"@dimen/nz_px_220"
android:layout_gravity=
"center_horizontal"
android:layout_marginLeft=
"@dimen/nz_px_20"
android:layout_marginTop=
"@dimen/nz_px_20"
android:layout_marginRight=
"@dimen/nz_px_20"
android:layout_marginBottom=
"@dimen/nz_px_20"
/>
<TextView
android:id=
"@+id/tv_time"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/nz_px_30"
android:layout_marginBottom=
"@dimen/nz_px_10"
android:gravity=
"center"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_36"
android:textStyle=
"bold"
/>
<LinearLayout
android:id=
"@+id/ll_timeDistance"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:orientation=
"horizontal"
>
<TextView
android:id=
"@+id/tv_residualTimeDistance"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_36"
android:textStyle=
"bold"
/>
<ImageView
android:id=
"@+id/iv_bottomTrafficLight"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_marginLeft=
"@dimen/nz_px_6"
android:src=
"@drawable/signal_light_horizontal"
/>
<TextView
android:id=
"@+id/tv_trafficLightNumber"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_marginLeft=
"@dimen/nz_px_6"
android:gravity=
"center"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_36"
android:textStyle=
"bold"
/>
</LinearLayout>
<TextView
android:id=
"@+id/tv_arriveTime"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/nz_px_30"
android:cursorVisible=
"true"
android:gravity=
"center"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_36"
android:textStyle=
"bold"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/ll_details"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginLeft=
"@dimen/nz_px_20"
android:layout_weight=
"1000"
android:gravity=
"center_vertical"
android:orientation=
"vertical"
>
<RelativeLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
>
<TextView
android:id=
"@+id/tv_turnDistance"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"#ffffff"
android:textSize=
"24sp"
android:textStyle=
"bold"
/>
<TextView
android:id=
"@+id/tv_turnAction"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignBaseline=
"@id/tv_turnDistance"
android:layout_marginStart=
"@dimen/nz_px_14"
android:layout_toRightOf=
"@id/tv_turnDistance"
android:singleLine=
"true"
android:textColor=
"@color/navingViewLinkUpInfoColor"
android:textSize=
"@dimen/nz_px_36"
android:textStyle=
"bold"
/>
</RelativeLayout>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<ImageView
android:id=
"@+id/iv_guidanceIcon"
android:layout_width=
"@dimen/nz_px_40"
android:layout_height=
"@dimen/nz_px_40"
android:layout_marginRight=
"@dimen/nz_px_20"
android:src=
"@drawable/navi_launcher"
android:visibility=
"gone"
/>
<TextView
android:id=
"@+id/tv_naving_exit_port"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_marginEnd=
"@dimen/nz_px_10"
android:background=
"@drawable/naving_exit_port_bg"
android:gravity=
"center"
android:paddingLeft=
"@dimen/nz_px_5"
android:paddingRight=
"@dimen/nz_px_5"
android:singleLine=
"true"
android:text=
"出口"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_35"
android:visibility=
"gone"
/>
<TextView
android:id=
"@+id/tv_turnRoadName"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_40"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
arcgislib/src/main/res/layout/layout_navi_junction.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/ll_junctionViewDecorView"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/naving_view_corner_bg"
android:orientation=
"vertical"
android:gravity=
"bottom"
>
<LinearLayout
android:id=
"@+id/navigation_top_half_bar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
android:paddingLeft=
"@dimen/nz_px_40"
android:paddingRight=
"@dimen/nz_px_40"
android:paddingBottom=
"@dimen/nz_px_20"
>
<TextView
android:id=
"@+id/tv_turnDistanceInJunctionView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"100米"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_60"
android:textStyle=
"bold"
/>
<com.minedata.minenavi.navi.TurnIconView
android:id=
"@+id/turnIconViewInJunctionView"
android:layout_width=
"@dimen/nz_px_80"
android:layout_height=
"@dimen/nz_px_80"
android:layout_marginLeft=
"@dimen/nz_px_10"
android:layout_marginRight=
"@dimen/nz_px_10"
/>
<TextView
android:id=
"@+id/tv_turnActionInJunctionView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"前往"
android:textColor=
"@color/navingViewLinkUpInfoColor"
android:textSize=
"@dimen/nz_px_30"
android:textStyle=
"bold"
/>
<TextView
android:id=
"@+id/tv_turnRoadNameInJunctionView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:singleLine=
"true"
android:text=
"北清路"
android:layout_marginStart=
"@dimen/nz_px_14"
android:textColor=
"#ffffff"
android:textSize=
"@dimen/nz_px_40"
android:textStyle=
"bold"
/>
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id=
"@+id/rl_junctionViewContainer"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
arcgislib/src/main/res/layout/layout_navi_root.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
style=
"@style/WrapContent.WidthMatchParent"
>
<include
android:id=
"@+id/ll_navi_information"
layout=
"@layout/layout_navi_board"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_alignParentLeft=
"true"
android:layout_alignParentTop=
"true"
android:layout_margin=
"@dimen/nz_px_20"
android:visibility=
"gone"
/>
<include
android:id=
"@+id/ll_junctionViewDecorView"
layout=
"@layout/layout_navi_junction"
android:layout_width=
"match_parent"
android:layout_height=
"260dp"
android:layout_margin=
"@dimen/nz_px_20"
android:visibility=
"invisible"
/>
<!-- 车道线 -->
<com.minedata.minenavi.navi.LaneView
android:id=
"@+id/naviLandBand"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignBottom=
"@+id/ll_junctionViewDecorView"
android:layout_centerHorizontal=
"true"
android:layout_marginTop=
"10dp"
android:translationZ=
"3dp"
/>
</RelativeLayout>
\ No newline at end of file
arcgislib/src/main/res/values/navi_dimens.xml
0 → 100644
View file @
c5c9915f
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen
name=
"title_bar_height"
>
50dip
</dimen>
<dimen
name=
"side_dialog"
>
85dip
</dimen>
<dimen
name=
"margin_left_right"
>
10dip
</dimen>
<dimen
name=
"margin_top"
>
10dip
</dimen>
<dimen
name=
"margin_top_es"
>
5dip
</dimen>
<dimen
name=
"text_reversion"
>
14dip
</dimen>
<dimen
name=
"filter_text_padding"
>
5dip
</dimen>
<dimen
name=
"calendar_day_headers_paddingbottom"
>
4dp
</dimen>
<dimen
name=
"calendar_month_topmargin"
>
16dp
</dimen>
<dimen
name=
"calendar_month_title_bottommargin"
>
4dp
</dimen>
<dimen
name=
"calendar_text_medium"
>
18sp
</dimen>
<dimen
name=
"calendar_text_small"
>
14sp
</dimen>
<dimen
name=
"text_width"
>
125dp
</dimen>
<dimen
name=
"actionbar_vertival_padding"
>
8dp
</dimen>
<!-- 字体大小 -->
<dimen
name=
"h1"
>
8sp
</dimen>
<dimen
name=
"h2"
>
9sp
</dimen>
<dimen
name=
"h3"
>
10sp
</dimen>
<dimen
name=
"h4"
>
11sp
</dimen>
<dimen
name=
"h5"
>
12sp
</dimen>
<dimen
name=
"h6"
>
13sp
</dimen>
<dimen
name=
"h7"
>
14sp
</dimen>
<dimen
name=
"h8"
>
15sp
</dimen>
<dimen
name=
"h9"
>
16sp
</dimen>
<dimen
name=
"h10"
>
17sp
</dimen>
<dimen
name=
"h11"
>
18sp
</dimen>
<dimen
name=
"h12"
>
19sp
</dimen>
<dimen
name=
"h13"
>
20sp
</dimen>
<dimen
name=
"h14"
>
21sp
</dimen>
<dimen
name=
"px8"
>
5dp
</dimen>
<dimen
name=
"px10"
>
6dp
</dimen>
<dimen
name=
"px12"
>
7dp
</dimen>
<dimen
name=
"px14"
>
8dp
</dimen>
<dimen
name=
"px16"
>
9dp
</dimen>
<dimen
name=
"px18"
>
10dp
</dimen>
<dimen
name=
"px20"
>
11dp
</dimen>
<dimen
name=
"px22"
>
12dp
</dimen>
<dimen
name=
"px24"
>
14dp
</dimen>
<dimen
name=
"px26"
>
15dp
</dimen>
<dimen
name=
"px28"
>
16dp
</dimen>
<dimen
name=
"px30"
>
17dp
</dimen>
<dimen
name=
"px32"
>
18dp
</dimen>
<dimen
name=
"px34"
>
19dp
</dimen>
<dimen
name=
"px36"
>
20dp
</dimen>
<dimen
name=
"px38"
>
21dp
</dimen>
<dimen
name=
"px40"
>
23dp
</dimen>
<dimen
name=
"px42"
>
24dp
</dimen>
<dimen
name=
"px44"
>
25dp
</dimen>
<dimen
name=
"px46"
>
26dp
</dimen>
<dimen
name=
"px48"
>
27dp
</dimen>
<dimen
name=
"px50"
>
28dp
</dimen>
<dimen
name=
"px52"
>
29dp
</dimen>
<dimen
name=
"px54"
>
30dp
</dimen>
<dimen
name=
"px56"
>
32dp
</dimen>
<dimen
name=
"px58"
>
33dp
</dimen>
<dimen
name=
"px60"
>
34dp
</dimen>
<dimen
name=
"px62"
>
35dp
</dimen>
<dimen
name=
"px64"
>
36dp
</dimen>
<dimen
name=
"px66"
>
37dp
</dimen>
<dimen
name=
"px68"
>
38dp
</dimen>
<dimen
name=
"px70"
>
39dp
</dimen>
<dimen
name=
"px72"
>
41dp
</dimen>
<dimen
name=
"px74"
>
42dp
</dimen>
<dimen
name=
"px76"
>
43dp
</dimen>
<dimen
name=
"px78"
>
44dp
</dimen>
<dimen
name=
"px80"
>
45dp
</dimen>
<dimen
name=
"px82"
>
46dp
</dimen>
<dimen
name=
"px84"
>
47dp
</dimen>
<dimen
name=
"px86"
>
48dp
</dimen>
<dimen
name=
"px88"
>
50dp
</dimen>
<dimen
name=
"px90"
>
51dp
</dimen>
<dimen
name=
"px92"
>
52dp
</dimen>
<dimen
name=
"px94"
>
53dp
</dimen>
<dimen
name=
"px96"
>
54dp
</dimen>
<dimen
name=
"px98"
>
55dp
</dimen>
<dimen
name=
"px100"
>
56dp
</dimen>
<dimen
name=
"px102"
>
57dp
</dimen>
<dimen
name=
"px104"
>
59dp
</dimen>
<dimen
name=
"px106"
>
60dp
</dimen>
<dimen
name=
"px108"
>
61dp
</dimen>
<dimen
name=
"px110"
>
62dp
</dimen>
<dimen
name=
"px112"
>
63dp
</dimen>
<dimen
name=
"px114"
>
64dp
</dimen>
<dimen
name=
"px116"
>
65dp
</dimen>
<dimen
name=
"px118"
>
66dp
</dimen>
<dimen
name=
"px120"
>
68dp
</dimen>
<dimen
name=
"px122"
>
69dp
</dimen>
<dimen
name=
"px124"
>
70dp
</dimen>
<dimen
name=
"px126"
>
71dp
</dimen>
<dimen
name=
"px128"
>
72dp
</dimen>
<dimen
name=
"px130"
>
73dp
</dimen>
<dimen
name=
"px132"
>
74dp
</dimen>
<dimen
name=
"px134"
>
75dp
</dimen>
<dimen
name=
"px136"
>
77dp
</dimen>
<dimen
name=
"px138"
>
78dp
</dimen>
<dimen
name=
"px140"
>
79dp
</dimen>
<dimen
name=
"px142"
>
80dp
</dimen>
<dimen
name=
"px144"
>
81dp
</dimen>
<dimen
name=
"px146"
>
82dp
</dimen>
<dimen
name=
"px148"
>
83dp
</dimen>
<dimen
name=
"px150"
>
84dp
</dimen>
<dimen
name=
"px152"
>
86dp
</dimen>
<dimen
name=
"px154"
>
87dp
</dimen>
<dimen
name=
"px156"
>
88dp
</dimen>
<dimen
name=
"px158"
>
89dp
</dimen>
<dimen
name=
"px160"
>
90dp
</dimen>
<dimen
name=
"px162"
>
91dp
</dimen>
<dimen
name=
"px164"
>
92dp
</dimen>
<dimen
name=
"px166"
>
93dp
</dimen>
<dimen
name=
"px168"
>
95dp
</dimen>
<dimen
name=
"px170"
>
96dp
</dimen>
<dimen
name=
"px172"
>
97dp
</dimen>
<dimen
name=
"px174"
>
98dp
</dimen>
<dimen
name=
"px176"
>
99dp
</dimen>
<dimen
name=
"px178"
>
100dp
</dimen>
<dimen
name=
"px180"
>
101dp
</dimen>
<dimen
name=
"px182"
>
102dp
</dimen>
<dimen
name=
"px184"
>
104dp
</dimen>
<dimen
name=
"px186"
>
105dp
</dimen>
<dimen
name=
"px188"
>
106dp
</dimen>
<dimen
name=
"px190"
>
107dp
</dimen>
<dimen
name=
"px192"
>
108dp
</dimen>
<dimen
name=
"px194"
>
109dp
</dimen>
<dimen
name=
"px196"
>
110dp
</dimen>
<dimen
name=
"px198"
>
111dp
</dimen>
<dimen
name=
"px200"
>
113dp
</dimen>
<dimen
name=
"px202"
>
114dp
</dimen>
<dimen
name=
"px204"
>
115dp
</dimen>
<dimen
name=
"px206"
>
116dp
</dimen>
<dimen
name=
"px208"
>
117dp
</dimen>
<dimen
name=
"px210"
>
118dp
</dimen>
<dimen
name=
"px212"
>
119dp
</dimen>
<dimen
name=
"px214"
>
120dp
</dimen>
<dimen
name=
"px216"
>
122dp
</dimen>
<dimen
name=
"px218"
>
123dp
</dimen>
<dimen
name=
"px220"
>
124dp
</dimen>
<dimen
name=
"px222"
>
125dp
</dimen>
<dimen
name=
"px224"
>
126dp
</dimen>
<dimen
name=
"px226"
>
127dp
</dimen>
<dimen
name=
"px228"
>
128dp
</dimen>
<dimen
name=
"px230"
>
129dp
</dimen>
<dimen
name=
"px232"
>
131dp
</dimen>
<dimen
name=
"px234"
>
132dp
</dimen>
<dimen
name=
"px236"
>
133dp
</dimen>
<dimen
name=
"px238"
>
134dp
</dimen>
<dimen
name=
"px240"
>
135dp
</dimen>
<dimen
name=
"px242"
>
136dp
</dimen>
<dimen
name=
"px244"
>
137dp
</dimen>
<dimen
name=
"px246"
>
138dp
</dimen>
<dimen
name=
"px248"
>
140dp
</dimen>
<dimen
name=
"px250"
>
141dp
</dimen>
<dimen
name=
"px252"
>
142dp
</dimen>
<dimen
name=
"px254"
>
143dp
</dimen>
<dimen
name=
"px256"
>
144dp
</dimen>
<dimen
name=
"px258"
>
145dp
</dimen>
<dimen
name=
"px260"
>
146dp
</dimen>
<dimen
name=
"px262"
>
147dp
</dimen>
<dimen
name=
"px264"
>
149dp
</dimen>
<dimen
name=
"px266"
>
150dp
</dimen>
<dimen
name=
"px268"
>
151dp
</dimen>
<dimen
name=
"px270"
>
152dp
</dimen>
<dimen
name=
"px272"
>
153dp
</dimen>
<dimen
name=
"px274"
>
154dp
</dimen>
<dimen
name=
"px276"
>
155dp
</dimen>
<dimen
name=
"px278"
>
156dp
</dimen>
<dimen
name=
"px280"
>
158dp
</dimen>
<dimen
name=
"px282"
>
159dp
</dimen>
<dimen
name=
"px284"
>
160dp
</dimen>
<dimen
name=
"px286"
>
161dp
</dimen>
<dimen
name=
"px288"
>
162dp
</dimen>
<dimen
name=
"px290"
>
163dp
</dimen>
<dimen
name=
"px292"
>
164dp
</dimen>
<dimen
name=
"px294"
>
165dp
</dimen>
<dimen
name=
"px296"
>
167dp
</dimen>
<dimen
name=
"px298"
>
168dp
</dimen>
<dimen
name=
"px300"
>
169dp
</dimen>
<dimen
name=
"px302"
>
170dp
</dimen>
<dimen
name=
"px304"
>
171dp
</dimen>
<dimen
name=
"px306"
>
172dp
</dimen>
<dimen
name=
"px308"
>
173dp
</dimen>
<dimen
name=
"px310"
>
174dp
</dimen>
<dimen
name=
"px312"
>
176dp
</dimen>
<dimen
name=
"px314"
>
177dp
</dimen>
<dimen
name=
"px316"
>
178dp
</dimen>
<dimen
name=
"px318"
>
179dp
</dimen>
<dimen
name=
"px320"
>
180dp
</dimen>
<dimen
name=
"px322"
>
181dp
</dimen>
<dimen
name=
"px324"
>
182dp
</dimen>
<dimen
name=
"px326"
>
183dp
</dimen>
<dimen
name=
"px328"
>
185dp
</dimen>
<dimen
name=
"px330"
>
186dp
</dimen>
<dimen
name=
"px332"
>
187dp
</dimen>
<dimen
name=
"px334"
>
188dp
</dimen>
<dimen
name=
"px336"
>
189dp
</dimen>
<dimen
name=
"px338"
>
190dp
</dimen>
<dimen
name=
"px340"
>
191dp
</dimen>
<dimen
name=
"px342"
>
192dp
</dimen>
<dimen
name=
"px344"
>
194dp
</dimen>
<dimen
name=
"px346"
>
195dp
</dimen>
<dimen
name=
"px348"
>
196dp
</dimen>
<dimen
name=
"px350"
>
197dp
</dimen>
<dimen
name=
"px352"
>
198dp
</dimen>
<dimen
name=
"px354"
>
199dp
</dimen>
<dimen
name=
"px356"
>
200dp
</dimen>
<dimen
name=
"px358"
>
201dp
</dimen>
<dimen
name=
"px360"
>
203dp
</dimen>
<dimen
name=
"px362"
>
204dp
</dimen>
<dimen
name=
"px364"
>
205dp
</dimen>
<dimen
name=
"px366"
>
206dp
</dimen>
<dimen
name=
"px368"
>
207dp
</dimen>
<dimen
name=
"px370"
>
208dp
</dimen>
<dimen
name=
"px372"
>
209dp
</dimen>
<dimen
name=
"px374"
>
210dp
</dimen>
<dimen
name=
"px376"
>
212dp
</dimen>
<dimen
name=
"px378"
>
213dp
</dimen>
<dimen
name=
"px380"
>
214dp
</dimen>
<dimen
name=
"px382"
>
215dp
</dimen>
<dimen
name=
"px384"
>
216dp
</dimen>
<dimen
name=
"px386"
>
217dp
</dimen>
<dimen
name=
"px388"
>
218dp
</dimen>
<dimen
name=
"px390"
>
219dp
</dimen>
<dimen
name=
"px392"
>
221dp
</dimen>
<dimen
name=
"px394"
>
222dp
</dimen>
<dimen
name=
"px396"
>
223dp
</dimen>
<dimen
name=
"px398"
>
224dp
</dimen>
<dimen
name=
"px400"
>
225dp
</dimen>
<dimen
name=
"px402"
>
226dp
</dimen>
<dimen
name=
"px404"
>
227dp
</dimen>
<dimen
name=
"px406"
>
228dp
</dimen>
<dimen
name=
"px408"
>
230dp
</dimen>
<dimen
name=
"px410"
>
231dp
</dimen>
<dimen
name=
"px412"
>
232dp
</dimen>
<dimen
name=
"px414"
>
233dp
</dimen>
<dimen
name=
"px416"
>
234dp
</dimen>
<dimen
name=
"px418"
>
235dp
</dimen>
<dimen
name=
"px420"
>
236dp
</dimen>
<dimen
name=
"px422"
>
237dp
</dimen>
<dimen
name=
"px424"
>
239dp
</dimen>
<dimen
name=
"px426"
>
240dp
</dimen>
<dimen
name=
"px428"
>
241dp
</dimen>
<dimen
name=
"px430"
>
242dp
</dimen>
<dimen
name=
"px432"
>
243dp
</dimen>
<dimen
name=
"px434"
>
244dp
</dimen>
<dimen
name=
"px436"
>
245dp
</dimen>
<dimen
name=
"px438"
>
246dp
</dimen>
<dimen
name=
"px440"
>
248dp
</dimen>
<dimen
name=
"px442"
>
249dp
</dimen>
<dimen
name=
"px444"
>
250dp
</dimen>
<dimen
name=
"px446"
>
251dp
</dimen>
<dimen
name=
"px448"
>
252dp
</dimen>
<dimen
name=
"px450"
>
253dp
</dimen>
<dimen
name=
"px452"
>
254dp
</dimen>
<dimen
name=
"px454"
>
255dp
</dimen>
<dimen
name=
"px456"
>
257dp
</dimen>
<dimen
name=
"px458"
>
258dp
</dimen>
<dimen
name=
"px460"
>
259dp
</dimen>
<dimen
name=
"px462"
>
260dp
</dimen>
<dimen
name=
"px464"
>
261dp
</dimen>
<dimen
name=
"px466"
>
262dp
</dimen>
<dimen
name=
"px468"
>
263dp
</dimen>
<dimen
name=
"px470"
>
264dp
</dimen>
<dimen
name=
"px472"
>
266dp
</dimen>
<dimen
name=
"px474"
>
267dp
</dimen>
<dimen
name=
"px476"
>
268dp
</dimen>
<dimen
name=
"px478"
>
269dp
</dimen>
<dimen
name=
"px480"
>
270dp
</dimen>
<dimen
name=
"px482"
>
271dp
</dimen>
<dimen
name=
"px484"
>
272dp
</dimen>
<dimen
name=
"px486"
>
273dp
</dimen>
<dimen
name=
"px488"
>
275dp
</dimen>
<dimen
name=
"px490"
>
276dp
</dimen>
<dimen
name=
"px492"
>
277dp
</dimen>
<dimen
name=
"px494"
>
278dp
</dimen>
<dimen
name=
"px496"
>
279dp
</dimen>
<dimen
name=
"px498"
>
280dp
</dimen>
<dimen
name=
"px500"
>
281dp
</dimen>
<dimen
name=
"px502"
>
282dp
</dimen>
<dimen
name=
"px504"
>
284dp
</dimen>
<dimen
name=
"px506"
>
285dp
</dimen>
<dimen
name=
"px508"
>
286dp
</dimen>
<dimen
name=
"px510"
>
287dp
</dimen>
<dimen
name=
"px512"
>
288dp
</dimen>
<dimen
name=
"px514"
>
289dp
</dimen>
<dimen
name=
"px516"
>
290dp
</dimen>
<dimen
name=
"px518"
>
291dp
</dimen>
<dimen
name=
"px520"
>
293dp
</dimen>
<dimen
name=
"px522"
>
294dp
</dimen>
<dimen
name=
"px524"
>
295dp
</dimen>
<dimen
name=
"px526"
>
296dp
</dimen>
<dimen
name=
"px528"
>
297dp
</dimen>
<dimen
name=
"px530"
>
298dp
</dimen>
<dimen
name=
"px532"
>
299dp
</dimen>
<dimen
name=
"px534"
>
300dp
</dimen>
<dimen
name=
"px536"
>
302dp
</dimen>
<dimen
name=
"px538"
>
303dp
</dimen>
<dimen
name=
"px540"
>
304dp
</dimen>
<dimen
name=
"px542"
>
305dp
</dimen>
<dimen
name=
"px544"
>
306dp
</dimen>
<dimen
name=
"px546"
>
307dp
</dimen>
<dimen
name=
"px548"
>
308dp
</dimen>
<dimen
name=
"px550"
>
309dp
</dimen>
<dimen
name=
"px552"
>
311dp
</dimen>
<dimen
name=
"px554"
>
312dp
</dimen>
<dimen
name=
"px556"
>
313dp
</dimen>
<dimen
name=
"px558"
>
314dp
</dimen>
<dimen
name=
"px560"
>
315dp
</dimen>
<dimen
name=
"px562"
>
316dp
</dimen>
<dimen
name=
"px564"
>
317dp
</dimen>
<dimen
name=
"px566"
>
318dp
</dimen>
<dimen
name=
"px568"
>
320dp
</dimen>
<dimen
name=
"px570"
>
321dp
</dimen>
<dimen
name=
"px572"
>
322dp
</dimen>
<dimen
name=
"px574"
>
323dp
</dimen>
<dimen
name=
"px576"
>
324dp
</dimen>
<dimen
name=
"px578"
>
325dp
</dimen>
<dimen
name=
"px580"
>
326dp
</dimen>
<dimen
name=
"px582"
>
327dp
</dimen>
<dimen
name=
"px584"
>
329dp
</dimen>
<dimen
name=
"px586"
>
330dp
</dimen>
<dimen
name=
"px588"
>
331dp
</dimen>
<dimen
name=
"px590"
>
332dp
</dimen>
<dimen
name=
"px592"
>
333dp
</dimen>
<dimen
name=
"px594"
>
334dp
</dimen>
<dimen
name=
"px596"
>
335dp
</dimen>
<dimen
name=
"px598"
>
336dp
</dimen>
<dimen
name=
"px600"
>
338dp
</dimen>
<dimen
name=
"px602"
>
339dp
</dimen>
<dimen
name=
"px604"
>
340dp
</dimen>
<dimen
name=
"px606"
>
341dp
</dimen>
<dimen
name=
"px608"
>
342dp
</dimen>
<dimen
name=
"px610"
>
343dp
</dimen>
<dimen
name=
"px612"
>
344dp
</dimen>
<dimen
name=
"px614"
>
345dp
</dimen>
<dimen
name=
"px616"
>
347dp
</dimen>
<dimen
name=
"px618"
>
348dp
</dimen>
<dimen
name=
"px620"
>
349dp
</dimen>
<dimen
name=
"px622"
>
350dp
</dimen>
<dimen
name=
"px624"
>
351dp
</dimen>
<dimen
name=
"px626"
>
352dp
</dimen>
<dimen
name=
"px628"
>
353dp
</dimen>
<dimen
name=
"px630"
>
354dp
</dimen>
<dimen
name=
"px632"
>
356dp
</dimen>
<dimen
name=
"px634"
>
357dp
</dimen>
<dimen
name=
"px636"
>
358dp
</dimen>
<dimen
name=
"px638"
>
359dp
</dimen>
<dimen
name=
"px640"
>
360dp
</dimen>
<dimen
name=
"base_dpi"
>
360dp
</dimen>
<dimen
name=
"nz_px_0"
>
0.00dp
</dimen>
<dimen
name=
"nz_px_1"
>
0.48dp
</dimen>
<dimen
name=
"nz_px_2"
>
0.96dp
</dimen>
<dimen
name=
"nz_px_3"
>
1.44dp
</dimen>
<dimen
name=
"nz_px_4"
>
1.92dp
</dimen>
<dimen
name=
"nz_px_5"
>
2.40dp
</dimen>
<dimen
name=
"nz_px_6"
>
2.88dp
</dimen>
<dimen
name=
"nz_px_7"
>
3.36dp
</dimen>
<dimen
name=
"nz_px_8"
>
3.84dp
</dimen>
<dimen
name=
"nz_px_9"
>
4.32dp
</dimen>
<dimen
name=
"nz_px_10"
>
4.80dp
</dimen>
<dimen
name=
"nz_px_11"
>
5.28dp
</dimen>
<dimen
name=
"nz_px_12"
>
5.76dp
</dimen>
<dimen
name=
"nz_px_13"
>
6.24dp
</dimen>
<dimen
name=
"nz_px_14"
>
6.72dp
</dimen>
<dimen
name=
"nz_px_15"
>
7.20dp
</dimen>
<dimen
name=
"nz_px_16"
>
7.68dp
</dimen>
<dimen
name=
"nz_px_17"
>
8.16dp
</dimen>
<dimen
name=
"nz_px_18"
>
8.64dp
</dimen>
<dimen
name=
"nz_px_19"
>
9.12dp
</dimen>
<dimen
name=
"nz_px_20"
>
9.60dp
</dimen>
<dimen
name=
"nz_px_21"
>
10.08dp
</dimen>
<dimen
name=
"nz_px_22"
>
10.56dp
</dimen>
<dimen
name=
"nz_px_23"
>
11.04dp
</dimen>
<dimen
name=
"nz_px_24"
>
11.52dp
</dimen>
<dimen
name=
"nz_px_25"
>
12.00dp
</dimen>
<dimen
name=
"nz_px_26"
>
12.48dp
</dimen>
<dimen
name=
"nz_px_27"
>
12.96dp
</dimen>
<dimen
name=
"nz_px_28"
>
13.44dp
</dimen>
<dimen
name=
"nz_px_29"
>
13.92dp
</dimen>
<dimen
name=
"nz_px_30"
>
14.40dp
</dimen>
<dimen
name=
"nz_px_31"
>
14.88dp
</dimen>
<dimen
name=
"nz_px_32"
>
15.36dp
</dimen>
<dimen
name=
"nz_px_33"
>
15.84dp
</dimen>
<dimen
name=
"nz_px_34"
>
16.32dp
</dimen>
<dimen
name=
"nz_px_35"
>
16.80dp
</dimen>
<dimen
name=
"nz_px_36"
>
17.28dp
</dimen>
<dimen
name=
"nz_px_37"
>
17.76dp
</dimen>
<dimen
name=
"nz_px_38"
>
18.24dp
</dimen>
<dimen
name=
"nz_px_39"
>
18.72dp
</dimen>
<dimen
name=
"nz_px_40"
>
19.20dp
</dimen>
<dimen
name=
"nz_px_41"
>
19.68dp
</dimen>
<dimen
name=
"nz_px_42"
>
20.16dp
</dimen>
<dimen
name=
"nz_px_43"
>
20.64dp
</dimen>
<dimen
name=
"nz_px_44"
>
21.12dp
</dimen>
<dimen
name=
"nz_px_45"
>
21.60dp
</dimen>
<dimen
name=
"nz_px_46"
>
22.08dp
</dimen>
<dimen
name=
"nz_px_47"
>
22.56dp
</dimen>
<dimen
name=
"nz_px_48"
>
23.04dp
</dimen>
<dimen
name=
"nz_px_49"
>
23.52dp
</dimen>
<dimen
name=
"nz_px_50"
>
24.00dp
</dimen>
<dimen
name=
"nz_px_51"
>
24.48dp
</dimen>
<dimen
name=
"nz_px_52"
>
24.96dp
</dimen>
<dimen
name=
"nz_px_53"
>
25.44dp
</dimen>
<dimen
name=
"nz_px_54"
>
25.92dp
</dimen>
<dimen
name=
"nz_px_55"
>
26.40dp
</dimen>
<dimen
name=
"nz_px_56"
>
26.88dp
</dimen>
<dimen
name=
"nz_px_57"
>
27.36dp
</dimen>
<dimen
name=
"nz_px_58"
>
27.84dp
</dimen>
<dimen
name=
"nz_px_59"
>
28.32dp
</dimen>
<dimen
name=
"nz_px_60"
>
28.80dp
</dimen>
<dimen
name=
"nz_px_61"
>
29.28dp
</dimen>
<dimen
name=
"nz_px_62"
>
29.76dp
</dimen>
<dimen
name=
"nz_px_63"
>
30.24dp
</dimen>
<dimen
name=
"nz_px_64"
>
30.72dp
</dimen>
<dimen
name=
"nz_px_65"
>
31.20dp
</dimen>
<dimen
name=
"nz_px_66"
>
31.68dp
</dimen>
<dimen
name=
"nz_px_67"
>
32.16dp
</dimen>
<dimen
name=
"nz_px_68"
>
32.64dp
</dimen>
<dimen
name=
"nz_px_69"
>
33.12dp
</dimen>
<dimen
name=
"nz_px_70"
>
33.60dp
</dimen>
<dimen
name=
"nz_px_71"
>
34.08dp
</dimen>
<dimen
name=
"nz_px_72"
>
34.56dp
</dimen>
<dimen
name=
"nz_px_73"
>
35.04dp
</dimen>
<dimen
name=
"nz_px_74"
>
35.52dp
</dimen>
<dimen
name=
"nz_px_75"
>
36.00dp
</dimen>
<dimen
name=
"nz_px_76"
>
36.48dp
</dimen>
<dimen
name=
"nz_px_77"
>
36.96dp
</dimen>
<dimen
name=
"nz_px_78"
>
37.44dp
</dimen>
<dimen
name=
"nz_px_79"
>
37.92dp
</dimen>
<dimen
name=
"nz_px_80"
>
38.40dp
</dimen>
<dimen
name=
"nz_px_81"
>
38.88dp
</dimen>
<dimen
name=
"nz_px_82"
>
39.36dp
</dimen>
<dimen
name=
"nz_px_83"
>
39.84dp
</dimen>
<dimen
name=
"nz_px_84"
>
40.32dp
</dimen>
<dimen
name=
"nz_px_85"
>
40.80dp
</dimen>
<dimen
name=
"nz_px_86"
>
41.28dp
</dimen>
<dimen
name=
"nz_px_87"
>
41.76dp
</dimen>
<dimen
name=
"nz_px_88"
>
42.24dp
</dimen>
<dimen
name=
"nz_px_89"
>
42.72dp
</dimen>
<dimen
name=
"nz_px_90"
>
43.20dp
</dimen>
<dimen
name=
"nz_px_91"
>
43.68dp
</dimen>
<dimen
name=
"nz_px_92"
>
44.16dp
</dimen>
<dimen
name=
"nz_px_93"
>
44.64dp
</dimen>
<dimen
name=
"nz_px_94"
>
45.12dp
</dimen>
<dimen
name=
"nz_px_95"
>
45.60dp
</dimen>
<dimen
name=
"nz_px_96"
>
46.08dp
</dimen>
<dimen
name=
"nz_px_97"
>
46.56dp
</dimen>
<dimen
name=
"nz_px_98"
>
47.04dp
</dimen>
<dimen
name=
"nz_px_99"
>
47.52dp
</dimen>
<dimen
name=
"nz_px_100"
>
48.00dp
</dimen>
<dimen
name=
"nz_px_101"
>
48.48dp
</dimen>
<dimen
name=
"nz_px_102"
>
48.96dp
</dimen>
<dimen
name=
"nz_px_103"
>
49.44dp
</dimen>
<dimen
name=
"nz_px_104"
>
49.92dp
</dimen>
<dimen
name=
"nz_px_105"
>
50.40dp
</dimen>
<dimen
name=
"nz_px_106"
>
50.88dp
</dimen>
<dimen
name=
"nz_px_107"
>
51.36dp
</dimen>
<dimen
name=
"nz_px_108"
>
51.84dp
</dimen>
<dimen
name=
"nz_px_109"
>
52.32dp
</dimen>
<dimen
name=
"nz_px_110"
>
52.80dp
</dimen>
<dimen
name=
"nz_px_111"
>
53.28dp
</dimen>
<dimen
name=
"nz_px_112"
>
53.76dp
</dimen>
<dimen
name=
"nz_px_113"
>
54.24dp
</dimen>
<dimen
name=
"nz_px_114"
>
54.72dp
</dimen>
<dimen
name=
"nz_px_115"
>
55.20dp
</dimen>
<dimen
name=
"nz_px_116"
>
55.68dp
</dimen>
<dimen
name=
"nz_px_117"
>
56.16dp
</dimen>
<dimen
name=
"nz_px_118"
>
56.64dp
</dimen>
<dimen
name=
"nz_px_119"
>
57.12dp
</dimen>
<dimen
name=
"nz_px_120"
>
57.60dp
</dimen>
<dimen
name=
"nz_px_121"
>
58.08dp
</dimen>
<dimen
name=
"nz_px_122"
>
58.56dp
</dimen>
<dimen
name=
"nz_px_123"
>
59.04dp
</dimen>
<dimen
name=
"nz_px_124"
>
59.52dp
</dimen>
<dimen
name=
"nz_px_125"
>
60.00dp
</dimen>
<dimen
name=
"nz_px_126"
>
60.48dp
</dimen>
<dimen
name=
"nz_px_127"
>
60.96dp
</dimen>
<dimen
name=
"nz_px_128"
>
61.44dp
</dimen>
<dimen
name=
"nz_px_129"
>
61.92dp
</dimen>
<dimen
name=
"nz_px_130"
>
62.40dp
</dimen>
<dimen
name=
"nz_px_131"
>
62.88dp
</dimen>
<dimen
name=
"nz_px_132"
>
63.36dp
</dimen>
<dimen
name=
"nz_px_133"
>
63.84dp
</dimen>
<dimen
name=
"nz_px_134"
>
64.32dp
</dimen>
<dimen
name=
"nz_px_135"
>
64.80dp
</dimen>
<dimen
name=
"nz_px_136"
>
65.28dp
</dimen>
<dimen
name=
"nz_px_137"
>
65.76dp
</dimen>
<dimen
name=
"nz_px_138"
>
66.24dp
</dimen>
<dimen
name=
"nz_px_139"
>
66.72dp
</dimen>
<dimen
name=
"nz_px_140"
>
67.20dp
</dimen>
<dimen
name=
"nz_px_141"
>
67.68dp
</dimen>
<dimen
name=
"nz_px_142"
>
68.16dp
</dimen>
<dimen
name=
"nz_px_143"
>
68.64dp
</dimen>
<dimen
name=
"nz_px_144"
>
69.12dp
</dimen>
<dimen
name=
"nz_px_145"
>
69.60dp
</dimen>
<dimen
name=
"nz_px_146"
>
70.08dp
</dimen>
<dimen
name=
"nz_px_147"
>
70.56dp
</dimen>
<dimen
name=
"nz_px_148"
>
71.04dp
</dimen>
<dimen
name=
"nz_px_149"
>
71.52dp
</dimen>
<dimen
name=
"nz_px_150"
>
72.00dp
</dimen>
<dimen
name=
"nz_px_151"
>
72.48dp
</dimen>
<dimen
name=
"nz_px_152"
>
72.96dp
</dimen>
<dimen
name=
"nz_px_153"
>
73.44dp
</dimen>
<dimen
name=
"nz_px_154"
>
73.92dp
</dimen>
<dimen
name=
"nz_px_155"
>
74.40dp
</dimen>
<dimen
name=
"nz_px_156"
>
74.88dp
</dimen>
<dimen
name=
"nz_px_157"
>
75.36dp
</dimen>
<dimen
name=
"nz_px_158"
>
75.84dp
</dimen>
<dimen
name=
"nz_px_159"
>
76.32dp
</dimen>
<dimen
name=
"nz_px_160"
>
76.80dp
</dimen>
<dimen
name=
"nz_px_161"
>
77.28dp
</dimen>
<dimen
name=
"nz_px_162"
>
77.76dp
</dimen>
<dimen
name=
"nz_px_163"
>
78.24dp
</dimen>
<dimen
name=
"nz_px_164"
>
78.72dp
</dimen>
<dimen
name=
"nz_px_165"
>
79.20dp
</dimen>
<dimen
name=
"nz_px_166"
>
79.68dp
</dimen>
<dimen
name=
"nz_px_167"
>
80.16dp
</dimen>
<dimen
name=
"nz_px_168"
>
80.64dp
</dimen>
<dimen
name=
"nz_px_169"
>
81.12dp
</dimen>
<dimen
name=
"nz_px_170"
>
81.60dp
</dimen>
<dimen
name=
"nz_px_171"
>
82.08dp
</dimen>
<dimen
name=
"nz_px_172"
>
82.56dp
</dimen>
<dimen
name=
"nz_px_173"
>
83.04dp
</dimen>
<dimen
name=
"nz_px_174"
>
83.52dp
</dimen>
<dimen
name=
"nz_px_175"
>
84.00dp
</dimen>
<dimen
name=
"nz_px_176"
>
84.48dp
</dimen>
<dimen
name=
"nz_px_177"
>
84.96dp
</dimen>
<dimen
name=
"nz_px_178"
>
85.44dp
</dimen>
<dimen
name=
"nz_px_179"
>
85.92dp
</dimen>
<dimen
name=
"nz_px_180"
>
86.40dp
</dimen>
<dimen
name=
"nz_px_181"
>
86.88dp
</dimen>
<dimen
name=
"nz_px_182"
>
87.36dp
</dimen>
<dimen
name=
"nz_px_183"
>
87.84dp
</dimen>
<dimen
name=
"nz_px_184"
>
88.32dp
</dimen>
<dimen
name=
"nz_px_185"
>
88.80dp
</dimen>
<dimen
name=
"nz_px_186"
>
89.28dp
</dimen>
<dimen
name=
"nz_px_187"
>
89.76dp
</dimen>
<dimen
name=
"nz_px_188"
>
90.24dp
</dimen>
<dimen
name=
"nz_px_189"
>
90.72dp
</dimen>
<dimen
name=
"nz_px_190"
>
91.20dp
</dimen>
<dimen
name=
"nz_px_191"
>
91.68dp
</dimen>
<dimen
name=
"nz_px_192"
>
92.16dp
</dimen>
<dimen
name=
"nz_px_193"
>
92.64dp
</dimen>
<dimen
name=
"nz_px_194"
>
93.12dp
</dimen>
<dimen
name=
"nz_px_195"
>
93.60dp
</dimen>
<dimen
name=
"nz_px_196"
>
94.08dp
</dimen>
<dimen
name=
"nz_px_197"
>
94.56dp
</dimen>
<dimen
name=
"nz_px_198"
>
95.04dp
</dimen>
<dimen
name=
"nz_px_199"
>
95.52dp
</dimen>
<dimen
name=
"nz_px_200"
>
96.00dp
</dimen>
<dimen
name=
"nz_px_201"
>
96.48dp
</dimen>
<dimen
name=
"nz_px_202"
>
96.96dp
</dimen>
<dimen
name=
"nz_px_203"
>
97.44dp
</dimen>
<dimen
name=
"nz_px_204"
>
97.92dp
</dimen>
<dimen
name=
"nz_px_205"
>
98.40dp
</dimen>
<dimen
name=
"nz_px_206"
>
98.88dp
</dimen>
<dimen
name=
"nz_px_207"
>
99.36dp
</dimen>
<dimen
name=
"nz_px_208"
>
99.84dp
</dimen>
<dimen
name=
"nz_px_209"
>
100.32dp
</dimen>
<dimen
name=
"nz_px_210"
>
100.80dp
</dimen>
<dimen
name=
"nz_px_211"
>
101.28dp
</dimen>
<dimen
name=
"nz_px_212"
>
101.76dp
</dimen>
<dimen
name=
"nz_px_213"
>
102.24dp
</dimen>
<dimen
name=
"nz_px_214"
>
102.72dp
</dimen>
<dimen
name=
"nz_px_215"
>
103.20dp
</dimen>
<dimen
name=
"nz_px_216"
>
103.68dp
</dimen>
<dimen
name=
"nz_px_217"
>
104.16dp
</dimen>
<dimen
name=
"nz_px_218"
>
104.64dp
</dimen>
<dimen
name=
"nz_px_219"
>
105.12dp
</dimen>
<dimen
name=
"nz_px_220"
>
105.60dp
</dimen>
<dimen
name=
"nz_px_221"
>
106.08dp
</dimen>
<dimen
name=
"nz_px_222"
>
106.56dp
</dimen>
<dimen
name=
"nz_px_223"
>
107.04dp
</dimen>
<dimen
name=
"nz_px_224"
>
107.52dp
</dimen>
<dimen
name=
"nz_px_225"
>
108.00dp
</dimen>
<dimen
name=
"nz_px_226"
>
108.48dp
</dimen>
<dimen
name=
"nz_px_227"
>
108.96dp
</dimen>
<dimen
name=
"nz_px_228"
>
109.44dp
</dimen>
<dimen
name=
"nz_px_229"
>
109.92dp
</dimen>
<dimen
name=
"nz_px_230"
>
110.40dp
</dimen>
<dimen
name=
"nz_px_231"
>
110.88dp
</dimen>
<dimen
name=
"nz_px_232"
>
111.36dp
</dimen>
<dimen
name=
"nz_px_233"
>
111.84dp
</dimen>
<dimen
name=
"nz_px_234"
>
112.32dp
</dimen>
<dimen
name=
"nz_px_235"
>
112.80dp
</dimen>
<dimen
name=
"nz_px_236"
>
113.28dp
</dimen>
<dimen
name=
"nz_px_237"
>
113.76dp
</dimen>
<dimen
name=
"nz_px_238"
>
114.24dp
</dimen>
<dimen
name=
"nz_px_239"
>
114.72dp
</dimen>
<dimen
name=
"nz_px_240"
>
115.20dp
</dimen>
<dimen
name=
"nz_px_241"
>
115.68dp
</dimen>
<dimen
name=
"nz_px_242"
>
116.16dp
</dimen>
<dimen
name=
"nz_px_243"
>
116.64dp
</dimen>
<dimen
name=
"nz_px_244"
>
117.12dp
</dimen>
<dimen
name=
"nz_px_245"
>
117.60dp
</dimen>
<dimen
name=
"nz_px_246"
>
118.08dp
</dimen>
<dimen
name=
"nz_px_247"
>
118.56dp
</dimen>
<dimen
name=
"nz_px_248"
>
119.04dp
</dimen>
<dimen
name=
"nz_px_249"
>
119.52dp
</dimen>
<dimen
name=
"nz_px_250"
>
120.00dp
</dimen>
<dimen
name=
"nz_px_251"
>
120.48dp
</dimen>
<dimen
name=
"nz_px_252"
>
120.96dp
</dimen>
<dimen
name=
"nz_px_253"
>
121.44dp
</dimen>
<dimen
name=
"nz_px_254"
>
121.92dp
</dimen>
<dimen
name=
"nz_px_255"
>
122.40dp
</dimen>
<dimen
name=
"nz_px_256"
>
122.88dp
</dimen>
<dimen
name=
"nz_px_257"
>
123.36dp
</dimen>
<dimen
name=
"nz_px_258"
>
123.84dp
</dimen>
<dimen
name=
"nz_px_259"
>
124.32dp
</dimen>
<dimen
name=
"nz_px_260"
>
124.80dp
</dimen>
<dimen
name=
"nz_px_261"
>
125.28dp
</dimen>
<dimen
name=
"nz_px_262"
>
125.76dp
</dimen>
<dimen
name=
"nz_px_263"
>
126.24dp
</dimen>
<dimen
name=
"nz_px_264"
>
126.72dp
</dimen>
<dimen
name=
"nz_px_265"
>
127.20dp
</dimen>
<dimen
name=
"nz_px_266"
>
127.68dp
</dimen>
<dimen
name=
"nz_px_267"
>
128.16dp
</dimen>
<dimen
name=
"nz_px_268"
>
128.64dp
</dimen>
<dimen
name=
"nz_px_269"
>
129.12dp
</dimen>
<dimen
name=
"nz_px_270"
>
129.60dp
</dimen>
<dimen
name=
"nz_px_271"
>
130.08dp
</dimen>
<dimen
name=
"nz_px_272"
>
130.56dp
</dimen>
<dimen
name=
"nz_px_273"
>
131.04dp
</dimen>
<dimen
name=
"nz_px_274"
>
131.52dp
</dimen>
<dimen
name=
"nz_px_275"
>
132.00dp
</dimen>
<dimen
name=
"nz_px_276"
>
132.48dp
</dimen>
<dimen
name=
"nz_px_277"
>
132.96dp
</dimen>
<dimen
name=
"nz_px_278"
>
133.44dp
</dimen>
<dimen
name=
"nz_px_279"
>
133.92dp
</dimen>
<dimen
name=
"nz_px_280"
>
134.40dp
</dimen>
<dimen
name=
"nz_px_281"
>
134.88dp
</dimen>
<dimen
name=
"nz_px_282"
>
135.36dp
</dimen>
<dimen
name=
"nz_px_283"
>
135.84dp
</dimen>
<dimen
name=
"nz_px_284"
>
136.32dp
</dimen>
<dimen
name=
"nz_px_285"
>
136.80dp
</dimen>
<dimen
name=
"nz_px_286"
>
137.28dp
</dimen>
<dimen
name=
"nz_px_287"
>
137.76dp
</dimen>
<dimen
name=
"nz_px_288"
>
138.24dp
</dimen>
<dimen
name=
"nz_px_289"
>
138.72dp
</dimen>
<dimen
name=
"nz_px_290"
>
139.20dp
</dimen>
<dimen
name=
"nz_px_291"
>
139.68dp
</dimen>
<dimen
name=
"nz_px_292"
>
140.16dp
</dimen>
<dimen
name=
"nz_px_293"
>
140.64dp
</dimen>
<dimen
name=
"nz_px_294"
>
141.12dp
</dimen>
<dimen
name=
"nz_px_295"
>
141.60dp
</dimen>
<dimen
name=
"nz_px_296"
>
142.08dp
</dimen>
<dimen
name=
"nz_px_297"
>
142.56dp
</dimen>
<dimen
name=
"nz_px_298"
>
143.04dp
</dimen>
<dimen
name=
"nz_px_299"
>
143.52dp
</dimen>
<dimen
name=
"nz_px_300"
>
144.00dp
</dimen>
<dimen
name=
"nz_px_301"
>
144.48dp
</dimen>
<dimen
name=
"nz_px_302"
>
144.96dp
</dimen>
<dimen
name=
"nz_px_303"
>
145.44dp
</dimen>
<dimen
name=
"nz_px_304"
>
145.92dp
</dimen>
<dimen
name=
"nz_px_305"
>
146.40dp
</dimen>
<dimen
name=
"nz_px_306"
>
146.88dp
</dimen>
<dimen
name=
"nz_px_307"
>
147.36dp
</dimen>
<dimen
name=
"nz_px_308"
>
147.84dp
</dimen>
<dimen
name=
"nz_px_309"
>
148.32dp
</dimen>
<dimen
name=
"nz_px_310"
>
148.80dp
</dimen>
<dimen
name=
"nz_px_311"
>
149.28dp
</dimen>
<dimen
name=
"nz_px_312"
>
149.76dp
</dimen>
<dimen
name=
"nz_px_313"
>
150.24dp
</dimen>
<dimen
name=
"nz_px_314"
>
150.72dp
</dimen>
<dimen
name=
"nz_px_315"
>
151.20dp
</dimen>
<dimen
name=
"nz_px_316"
>
151.68dp
</dimen>
<dimen
name=
"nz_px_317"
>
152.16dp
</dimen>
<dimen
name=
"nz_px_318"
>
152.64dp
</dimen>
<dimen
name=
"nz_px_319"
>
153.12dp
</dimen>
<dimen
name=
"nz_px_320"
>
153.60dp
</dimen>
<dimen
name=
"nz_px_321"
>
154.08dp
</dimen>
<dimen
name=
"nz_px_322"
>
154.56dp
</dimen>
<dimen
name=
"nz_px_323"
>
155.04dp
</dimen>
<dimen
name=
"nz_px_324"
>
155.52dp
</dimen>
<dimen
name=
"nz_px_325"
>
156.00dp
</dimen>
<dimen
name=
"nz_px_326"
>
156.48dp
</dimen>
<dimen
name=
"nz_px_327"
>
156.96dp
</dimen>
<dimen
name=
"nz_px_328"
>
157.44dp
</dimen>
<dimen
name=
"nz_px_329"
>
157.92dp
</dimen>
<dimen
name=
"nz_px_330"
>
158.40dp
</dimen>
<dimen
name=
"nz_px_331"
>
158.88dp
</dimen>
<dimen
name=
"nz_px_332"
>
159.36dp
</dimen>
<dimen
name=
"nz_px_333"
>
159.84dp
</dimen>
<dimen
name=
"nz_px_334"
>
160.32dp
</dimen>
<dimen
name=
"nz_px_335"
>
160.80dp
</dimen>
<dimen
name=
"nz_px_336"
>
161.28dp
</dimen>
<dimen
name=
"nz_px_337"
>
161.76dp
</dimen>
<dimen
name=
"nz_px_338"
>
162.24dp
</dimen>
<dimen
name=
"nz_px_339"
>
162.72dp
</dimen>
<dimen
name=
"nz_px_340"
>
163.20dp
</dimen>
<dimen
name=
"nz_px_341"
>
163.68dp
</dimen>
<dimen
name=
"nz_px_342"
>
164.16dp
</dimen>
<dimen
name=
"nz_px_343"
>
164.64dp
</dimen>
<dimen
name=
"nz_px_344"
>
165.12dp
</dimen>
<dimen
name=
"nz_px_345"
>
165.60dp
</dimen>
<dimen
name=
"nz_px_346"
>
166.08dp
</dimen>
<dimen
name=
"nz_px_347"
>
166.56dp
</dimen>
<dimen
name=
"nz_px_348"
>
167.04dp
</dimen>
<dimen
name=
"nz_px_349"
>
167.52dp
</dimen>
<dimen
name=
"nz_px_350"
>
168.00dp
</dimen>
<dimen
name=
"nz_px_351"
>
168.48dp
</dimen>
<dimen
name=
"nz_px_352"
>
168.96dp
</dimen>
<dimen
name=
"nz_px_353"
>
169.44dp
</dimen>
<dimen
name=
"nz_px_354"
>
169.92dp
</dimen>
<dimen
name=
"nz_px_355"
>
170.40dp
</dimen>
<dimen
name=
"nz_px_356"
>
170.88dp
</dimen>
<dimen
name=
"nz_px_357"
>
171.36dp
</dimen>
<dimen
name=
"nz_px_358"
>
171.84dp
</dimen>
<dimen
name=
"nz_px_359"
>
172.32dp
</dimen>
<dimen
name=
"nz_px_360"
>
172.80dp
</dimen>
<dimen
name=
"nz_px_361"
>
173.28dp
</dimen>
<dimen
name=
"nz_px_362"
>
173.76dp
</dimen>
<dimen
name=
"nz_px_363"
>
174.24dp
</dimen>
<dimen
name=
"nz_px_364"
>
174.72dp
</dimen>
<dimen
name=
"nz_px_365"
>
175.20dp
</dimen>
<dimen
name=
"nz_px_366"
>
175.68dp
</dimen>
<dimen
name=
"nz_px_367"
>
176.16dp
</dimen>
<dimen
name=
"nz_px_368"
>
176.64dp
</dimen>
<dimen
name=
"nz_px_369"
>
177.12dp
</dimen>
<dimen
name=
"nz_px_370"
>
177.60dp
</dimen>
<dimen
name=
"nz_px_371"
>
178.08dp
</dimen>
<dimen
name=
"nz_px_372"
>
178.56dp
</dimen>
<dimen
name=
"nz_px_373"
>
179.04dp
</dimen>
<dimen
name=
"nz_px_374"
>
179.52dp
</dimen>
<dimen
name=
"nz_px_375"
>
180.00dp
</dimen>
<dimen
name=
"nz_px_376"
>
180.48dp
</dimen>
<dimen
name=
"nz_px_377"
>
180.96dp
</dimen>
<dimen
name=
"nz_px_378"
>
181.44dp
</dimen>
<dimen
name=
"nz_px_379"
>
181.92dp
</dimen>
<dimen
name=
"nz_px_380"
>
182.40dp
</dimen>
<dimen
name=
"nz_px_381"
>
182.88dp
</dimen>
<dimen
name=
"nz_px_382"
>
183.36dp
</dimen>
<dimen
name=
"nz_px_383"
>
183.84dp
</dimen>
<dimen
name=
"nz_px_384"
>
184.32dp
</dimen>
<dimen
name=
"nz_px_385"
>
184.80dp
</dimen>
<dimen
name=
"nz_px_386"
>
185.28dp
</dimen>
<dimen
name=
"nz_px_387"
>
185.76dp
</dimen>
<dimen
name=
"nz_px_388"
>
186.24dp
</dimen>
<dimen
name=
"nz_px_389"
>
186.72dp
</dimen>
<dimen
name=
"nz_px_390"
>
187.20dp
</dimen>
<dimen
name=
"nz_px_391"
>
187.68dp
</dimen>
<dimen
name=
"nz_px_392"
>
188.16dp
</dimen>
<dimen
name=
"nz_px_393"
>
188.64dp
</dimen>
<dimen
name=
"nz_px_394"
>
189.12dp
</dimen>
<dimen
name=
"nz_px_395"
>
189.60dp
</dimen>
<dimen
name=
"nz_px_396"
>
190.08dp
</dimen>
<dimen
name=
"nz_px_397"
>
190.56dp
</dimen>
<dimen
name=
"nz_px_398"
>
191.04dp
</dimen>
<dimen
name=
"nz_px_399"
>
191.52dp
</dimen>
<dimen
name=
"nz_px_400"
>
192.00dp
</dimen>
</resources>
\ No newline at end of file
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