Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
R
react-native-amap3d
Project
Project
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
放牛的园子
react-native-amap3d
Commits
c6355cc1
Commit
c6355cc1
authored
Jun 04, 2017
by
Qiu Xiang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
实现 Polyline 的基本功能
parent
438a5796
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
330 additions
and
7 deletions
+330
-7
AMap3DPackage.java
...src/main/java/cn/qiuxiang/react/amap3d/AMap3DPackage.java
+2
-1
AMapPolyline.java
.../src/main/java/cn/qiuxiang/react/amap3d/AMapPolyline.java
+113
-0
AMapPolylineManager.java
...in/java/cn/qiuxiang/react/amap3d/AMapPolylineManager.java
+63
-0
AMapView.java
android/src/main/java/cn/qiuxiang/react/amap3d/AMapView.java
+8
-2
AMapViewManager.java
...c/main/java/cn/qiuxiang/react/amap3d/AMapViewManager.java
+2
-0
MapView.js
components/MapView.js
+3
-1
Polyline.js
components/Polyline.js
+58
-0
app.js
example/src/app.js
+2
-0
examples.js
example/src/examples.js
+2
-0
marker.js
example/src/marker.js
+2
-3
polyline.js
example/src/polyline.js
+75
-0
No files found.
android/src/main/java/cn/qiuxiang/react/amap3d/AMap3DPackage.java
View file @
c6355cc1
...
@@ -27,6 +27,7 @@ public class AMap3DPackage implements ReactPackage {
...
@@ -27,6 +27,7 @@ public class AMap3DPackage implements ReactPackage {
new
AMapViewManager
(),
new
AMapViewManager
(),
new
AMapMarkerManager
(),
new
AMapMarkerManager
(),
new
AMapOverlayManager
(),
new
AMapOverlayManager
(),
new
AMapInfoWindowManager
());
new
AMapInfoWindowManager
(),
new
AMapPolylineManager
());
}
}
}
}
android/src/main/java/cn/qiuxiang/react/amap3d/AMapPolyline.java
0 → 100644
View file @
c6355cc1
package
cn
.
qiuxiang
.
react
.
amap3d
;
import
android.content.Context
;
import
com.amap.api.maps.AMap
;
import
com.amap.api.maps.model.LatLng
;
import
com.amap.api.maps.model.Polyline
;
import
com.amap.api.maps.model.PolylineOptions
;
import
com.facebook.react.bridge.ReadableArray
;
import
com.facebook.react.bridge.ReadableMap
;
import
com.facebook.react.views.view.ReactViewGroup
;
import
java.util.ArrayList
;
public
class
AMapPolyline
extends
ReactViewGroup
{
private
ArrayList
<
LatLng
>
coordinates
;
private
Polyline
polyline
;
private
int
color
;
private
float
width
;
private
float
zIndex
;
private
boolean
geodesic
;
private
boolean
dottedLine
;
private
float
opacity
;
private
ArrayList
<
Integer
>
colors
;
private
boolean
gradient
;
public
AMapPolyline
(
Context
context
)
{
super
(
context
);
}
public
void
setCoordinates
(
ReadableArray
coordinates
)
{
this
.
coordinates
=
new
ArrayList
<>(
coordinates
.
size
());
for
(
int
i
=
0
;
i
<
coordinates
.
size
();
i
++)
{
ReadableMap
coordinate
=
coordinates
.
getMap
(
i
);
this
.
coordinates
.
add
(
i
,
new
LatLng
(
coordinate
.
getDouble
(
"latitude"
),
coordinate
.
getDouble
(
"longitude"
)));
}
if
(
polyline
!=
null
)
{
polyline
.
setPoints
(
this
.
coordinates
);
}
}
public
void
setColor
(
int
color
)
{
this
.
color
=
color
;
if
(
polyline
!=
null
)
{
polyline
.
setColor
(
color
);
}
}
public
void
setWidth
(
float
width
)
{
this
.
width
=
width
;
if
(
polyline
!=
null
)
{
polyline
.
setWidth
(
width
);
}
}
public
void
setZIndex
(
float
zIndex
)
{
this
.
zIndex
=
zIndex
;
if
(
polyline
!=
null
)
{
polyline
.
setZIndex
(
zIndex
);
}
}
public
void
setGeodesic
(
boolean
geodesic
)
{
this
.
geodesic
=
geodesic
;
if
(
polyline
!=
null
)
{
polyline
.
setGeodesic
(
geodesic
);
}
}
public
void
setDottedLine
(
boolean
dottedLine
)
{
this
.
dottedLine
=
dottedLine
;
if
(
polyline
!=
null
)
{
polyline
.
setDottedLine
(
dottedLine
);
}
}
public
void
setGradient
(
boolean
gradient
)
{
this
.
gradient
=
gradient
;
}
public
void
setOpacity
(
float
opacity
)
{
this
.
opacity
=
opacity
;
if
(
polyline
!=
null
)
{
polyline
.
setTransparency
(
opacity
);
}
}
public
void
setColors
(
ReadableArray
colors
)
{
this
.
colors
=
new
ArrayList
<>(
colors
.
size
());
for
(
int
i
=
0
;
i
<
colors
.
size
();
i
++)
{
this
.
colors
.
add
(
colors
.
getInt
(
i
));
}
}
public
void
addToMap
(
AMap
map
)
{
polyline
=
map
.
addPolyline
(
new
PolylineOptions
()
.
addAll
(
coordinates
)
.
color
(
color
)
.
colorValues
(
colors
)
.
width
(
width
)
.
useGradient
(
gradient
)
.
geodesic
(
geodesic
)
.
setDottedLine
(
dottedLine
)
.
transparency
(
opacity
)
.
zIndex
(
zIndex
));
}
public
String
getPolylineId
()
{
return
polyline
.
getId
();
}
}
android/src/main/java/cn/qiuxiang/react/amap3d/AMapPolylineManager.java
0 → 100644
View file @
c6355cc1
package
cn
.
qiuxiang
.
react
.
amap3d
;
import
com.facebook.react.bridge.ReadableArray
;
import
com.facebook.react.uimanager.ThemedReactContext
;
import
com.facebook.react.uimanager.ViewGroupManager
;
import
com.facebook.react.uimanager.annotations.ReactProp
;
class
AMapPolylineManager
extends
ViewGroupManager
<
AMapPolyline
>
{
@Override
public
String
getName
()
{
return
"AMapPolyline"
;
}
@Override
protected
AMapPolyline
createViewInstance
(
ThemedReactContext
reactContext
)
{
return
new
AMapPolyline
(
reactContext
);
}
@ReactProp
(
name
=
"coordinates"
)
public
void
setCoordinate
(
AMapPolyline
polyline
,
ReadableArray
coordinates
)
{
polyline
.
setCoordinates
(
coordinates
);
}
@ReactProp
(
name
=
"colors"
)
public
void
setColors
(
AMapPolyline
polyline
,
ReadableArray
colors
)
{
polyline
.
setColors
(
colors
);
}
@ReactProp
(
name
=
"color"
,
customType
=
"Color"
)
public
void
setColor
(
AMapPolyline
polyline
,
int
color
)
{
polyline
.
setColor
(
color
);
}
@ReactProp
(
name
=
"width"
)
public
void
setWidth
(
AMapPolyline
polyline
,
int
width
)
{
polyline
.
setWidth
(
width
);
}
@ReactProp
(
name
=
"zIndex"
)
public
void
setZIndex
(
AMapPolyline
polyline
,
int
zIndex
)
{
polyline
.
setZIndex
(
zIndex
);
}
@ReactProp
(
name
=
"opacity"
)
public
void
setOpacity
(
AMapPolyline
polyline
,
float
opacity
)
{
polyline
.
setOpacity
(
opacity
);
}
@ReactProp
(
name
=
"geodesic"
)
public
void
setGeodesic
(
AMapPolyline
polyline
,
boolean
geodesic
)
{
polyline
.
setGeodesic
(
geodesic
);
}
@ReactProp
(
name
=
"dottedLine"
)
public
void
setDottedLine
(
AMapPolyline
polyline
,
boolean
dottedLine
)
{
polyline
.
setDottedLine
(
dottedLine
);
}
@ReactProp
(
name
=
"gradient"
)
public
void
setGradient
(
AMapPolyline
polyline
,
boolean
gradient
)
{
polyline
.
setGradient
(
gradient
);
}
}
android/src/main/java/cn/qiuxiang/react/amap3d/AMapView.java
View file @
c6355cc1
...
@@ -28,6 +28,7 @@ public class AMapView extends MapView {
...
@@ -28,6 +28,7 @@ public class AMapView extends MapView {
public
final
UiSettings
ui
;
public
final
UiSettings
ui
;
private
final
RCTEventEmitter
eventEmitter
;
private
final
RCTEventEmitter
eventEmitter
;
private
Map
<
String
,
AMapMarker
>
markers
=
new
HashMap
<>();
private
Map
<
String
,
AMapMarker
>
markers
=
new
HashMap
<>();
private
Map
<
String
,
AMapPolyline
>
polylines
=
new
HashMap
<>();
public
AMapView
(
final
ThemedReactContext
context
)
{
public
AMapView
(
final
ThemedReactContext
context
)
{
super
(
context
);
super
(
context
);
...
@@ -146,6 +147,10 @@ public class AMapView extends MapView {
...
@@ -146,6 +147,10 @@ public class AMapView extends MapView {
});
});
}
}
private
static
float
pxFromDp
(
Context
context
,
float
dp
)
{
return
dp
*
context
.
getResources
().
getDisplayMetrics
().
density
;
}
public
void
addMarker
(
AMapMarker
marker
)
{
public
void
addMarker
(
AMapMarker
marker
)
{
marker
.
addToMap
(
map
);
marker
.
addToMap
(
map
);
markers
.
put
(
marker
.
getMarkerId
(),
marker
);
markers
.
put
(
marker
.
getMarkerId
(),
marker
);
...
@@ -155,7 +160,8 @@ public class AMapView extends MapView {
...
@@ -155,7 +160,8 @@ public class AMapView extends MapView {
eventEmitter
.
receiveEvent
(
getId
(),
name
,
data
);
eventEmitter
.
receiveEvent
(
getId
(),
name
,
data
);
}
}
private
static
float
pxFromDp
(
Context
context
,
float
dp
)
{
public
void
addPolyline
(
AMapPolyline
polyline
)
{
return
dp
*
context
.
getResources
().
getDisplayMetrics
().
density
;
polyline
.
addToMap
(
map
);
polylines
.
put
(
polyline
.
getPolylineId
(),
polyline
);
}
}
}
}
android/src/main/java/cn/qiuxiang/react/amap3d/AMapViewManager.java
View file @
c6355cc1
...
@@ -31,6 +31,8 @@ class AMapViewManager extends ViewGroupManager<AMapView> {
...
@@ -31,6 +31,8 @@ class AMapViewManager extends ViewGroupManager<AMapView> {
public
void
addView
(
AMapView
mapView
,
View
child
,
int
index
)
{
public
void
addView
(
AMapView
mapView
,
View
child
,
int
index
)
{
if
(
child
instanceof
AMapMarker
)
{
if
(
child
instanceof
AMapMarker
)
{
mapView
.
addMarker
((
AMapMarker
)
child
);
mapView
.
addMarker
((
AMapMarker
)
child
);
}
else
if
(
child
instanceof
AMapPolyline
)
{
mapView
.
addPolyline
((
AMapPolyline
)
child
);
}
}
}
}
...
...
components/MapView.js
View file @
c6355cc1
...
@@ -3,6 +3,7 @@ import {requireNativeComponent, View} from 'react-native'
...
@@ -3,6 +3,7 @@ import {requireNativeComponent, View} from 'react-native'
import
Marker
from
'./Marker'
import
Marker
from
'./Marker'
import
InfoWindow
from
'./InfoWindow'
import
InfoWindow
from
'./InfoWindow'
import
Overlay
from
'./Overlay'
import
Overlay
from
'./Overlay'
import
Polyline
from
'./Polyline'
const
CoordinatePropType
=
PropTypes
.
shape
({
const
CoordinatePropType
=
PropTypes
.
shape
({
latitude
:
PropTypes
.
number
.
isRequired
,
latitude
:
PropTypes
.
number
.
isRequired
,
...
@@ -146,9 +147,10 @@ class MapView extends Component {
...
@@ -146,9 +147,10 @@ class MapView extends Component {
static
Marker
=
Marker
static
Marker
=
Marker
static
Overlay
=
Overlay
static
Overlay
=
Overlay
static
InfoWindow
=
InfoWindow
static
InfoWindow
=
InfoWindow
static
Polyline
=
Polyline
}
}
AMapView
=
requireNativeComponent
(
'AMapView'
,
MapView
)
AMapView
=
requireNativeComponent
(
'AMapView'
,
MapView
)
export
default
MapView
export
default
MapView
export
{
MapView
,
Marker
,
InfoWindow
,
Overlay
}
export
{
MapView
,
Marker
,
InfoWindow
,
Overlay
,
Polyline
}
components/Polyline.js
0 → 100644
View file @
c6355cc1
import
React
,
{
PropTypes
,
Component
}
from
'react'
import
{
processColor
,
requireNativeComponent
,
View
,
PixelRatio
}
from
'react-native'
import
{
CoordinatePropType
}
from
'./PropTypes'
class
Polyline
extends
Component
{
static
propTypes
=
{
...
View
.
propTypes
,
coordinates
:
PropTypes
.
arrayOf
(
CoordinatePropType
).
isRequired
,
width
:
PropTypes
.
number
,
color
:
PropTypes
.
string
,
zIndex
:
PropTypes
.
number
,
opacity
:
PropTypes
.
number
,
/**
* 多段颜色
*/
colors
:
PropTypes
.
oneOfType
([
PropTypes
.
arrayOf
(
PropTypes
.
number
),
PropTypes
.
arrayOf
(
PropTypes
.
string
),
]),
/**
* 是否使用颜色渐变
*/
gradient
:
PropTypes
.
bool
,
/**
* 是否绘制大地线
*/
geodesic
:
PropTypes
.
bool
,
/**
* 是否绘制虚线
*/
dottedLine
:
PropTypes
.
bool
,
}
static
defaultProps
=
{
width
:
1
,
color
:
'#000'
,
colors
:
[],
opacity
:
1
,
}
render
()
{
const
props
=
{
...
this
.
props
,
width
:
PixelRatio
.
getPixelSizeForLayoutSize
(
this
.
props
.
width
),
colors
:
this
.
props
.
colors
.
map
(
processColor
),
}
return
<
AMapPolyline
{...
props
}
/
>
}
}
AMapPolyline
=
requireNativeComponent
(
'AMapPolyline'
,
Polyline
)
export
default
Polyline
example/src/app.js
View file @
c6355cc1
...
@@ -6,6 +6,7 @@ import Indoor from './indoor'
...
@@ -6,6 +6,7 @@ import Indoor from './indoor'
import
Controls
from
'./controls'
import
Controls
from
'./controls'
import
Gestures
from
'./gestures'
import
Gestures
from
'./gestures'
import
Marker
from
'./marker'
import
Marker
from
'./marker'
import
Polyline
from
'./polyline'
export
default
StackNavigator
({
export
default
StackNavigator
({
Examples
:
{
screen
:
Examples
},
Examples
:
{
screen
:
Examples
},
...
@@ -15,6 +16,7 @@ export default StackNavigator({
...
@@ -15,6 +16,7 @@ export default StackNavigator({
Controls
:
{
screen
:
Controls
},
Controls
:
{
screen
:
Controls
},
Gestures
:
{
screen
:
Gestures
},
Gestures
:
{
screen
:
Gestures
},
Marker
:
{
screen
:
Marker
},
Marker
:
{
screen
:
Marker
},
Polyline
:
{
screen
:
Polyline
},
},
{
},
{
navigationOptions
:
{
navigationOptions
:
{
headerTintColor
:
'#212121'
,
headerTintColor
:
'#212121'
,
...
...
example/src/examples.js
View file @
c6355cc1
...
@@ -44,6 +44,8 @@ export default class Examples extends Component {
...
@@ -44,6 +44,8 @@ export default class Examples extends Component {
<
/View
>
<
/View
>
<
View
style
=
{
styles
.
group
}
>
<
View
style
=
{
styles
.
group
}
>
{
this
.
_renderItem
(
'添加标记'
,
'Marker'
)}
{
this
.
_renderItem
(
'添加标记'
,
'Marker'
)}
<
View
style
=
{
styles
.
separator
}
/
>
{
this
.
_renderItem
(
'绘制折线'
,
'Polyline'
)}
<
/View
>
<
/View
>
<
/ScrollView
>
<
/ScrollView
>
}
}
...
...
example/src/marker.js
View file @
c6355cc1
import
React
,
{
Component
}
from
'react'
import
React
,
{
Component
}
from
'react'
import
{
StyleSheet
,
Alert
,
Text
,
View
}
from
'react-native'
import
{
StyleSheet
,
Alert
,
Text
}
from
'react-native'
import
{
MapView
,
Marker
,
InfoWindow
,
Overlay
}
from
'react-native-amap3d'
import
{
MapView
,
Marker
,
InfoWindow
,
Overlay
}
from
'react-native-amap3d'
export
default
class
Marker
Component
extends
Component
{
export
default
class
Marker
Example
extends
Component
{
static
navigationOptions
=
{
static
navigationOptions
=
{
title
:
'添加标记'
,
title
:
'添加标记'
,
}
}
...
@@ -40,7 +40,6 @@ export default class MarkerComponent extends Component {
...
@@ -40,7 +40,6 @@ export default class MarkerComponent extends Component {
<
Marker
<
Marker
selected
selected
icon
=
'HUE_RED'
icon
=
'HUE_RED'
title
=
'一个红色的 Marker'
infoWindowWidth
=
{
100
}
infoWindowWidth
=
{
100
}
coordinate
=
{{
coordinate
=
{{
latitude
:
39.806901
,
latitude
:
39.806901
,
...
...
example/src/polyline.js
0 → 100644
View file @
c6355cc1
import
React
,
{
Component
}
from
'react'
import
{
StyleSheet
}
from
'react-native'
import
{
MapView
,
Polyline
}
from
'react-native-amap3d'
export
default
class
PolylineExample
extends
Component
{
static
navigationOptions
=
{
title
:
'绘制折线'
,
}
render
()
{
return
<
MapView
style
=
{
StyleSheet
.
absoluteFill
}
>
<
Polyline
width
=
{
5
}
coordinates
=
{[
{
latitude
:
40.206901
,
longitude
:
116.097972
,
},
{
latitude
:
40.206901
,
longitude
:
116.597972
,
},
]}
/
>
<
Polyline
width
=
{
5
}
color
=
'red'
coordinates
=
{[
{
latitude
:
40.106901
,
longitude
:
116.097972
,
},
{
latitude
:
40.106901
,
longitude
:
116.597972
,
},
]}
/
>
<
Polyline
dottedLine
width
=
{
5
}
coordinates
=
{[
{
latitude
:
40.006901
,
longitude
:
116.097972
,
},
{
latitude
:
40.006901
,
longitude
:
116.597972
,
},
]}
/
>
<
Polyline
gradient
width
=
{
5
}
color
=
'blue'
colors
=
{[
'#f44336'
,
'#2196f3'
,
'#4caf50'
]}
coordinates
=
{[
{
latitude
:
39.906901
,
longitude
:
116.097972
,
},
{
latitude
:
39.906901
,
longitude
:
116.257972
,
},
{
latitude
:
39.906901
,
longitude
:
116.457972
,
},
{
latitude
:
39.906901
,
longitude
:
116.597972
,
},
]}
/
>
<
/MapView
>
}
}
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