Commit f4ee5c3b authored by Qiu Xiang's avatar Qiu Xiang

实现 Marker 颜色选择

parent ce26e789
...@@ -20,7 +20,26 @@ import com.facebook.imagepipeline.request.ImageRequest; ...@@ -20,7 +20,26 @@ import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.views.view.ReactViewGroup; import com.facebook.react.views.view.ReactViewGroup;
import java.util.HashMap;
import java.util.Map;
public class AMapMarker extends ReactViewGroup { public class AMapMarker extends ReactViewGroup {
private static final Map<String, Float> COLORS;
static {
COLORS = new HashMap<String, Float>();
COLORS.put("HUE_AZURE", BitmapDescriptorFactory.HUE_AZURE);
COLORS.put("HUE_BLUE", BitmapDescriptorFactory.HUE_BLUE);
COLORS.put("HUE_CYAN", BitmapDescriptorFactory.HUE_CYAN);
COLORS.put("HUE_GREEN", BitmapDescriptorFactory.HUE_GREEN);
COLORS.put("HUE_MAGENTA", BitmapDescriptorFactory.HUE_MAGENTA);
COLORS.put("HUE_ORANGE", BitmapDescriptorFactory.HUE_ORANGE);
COLORS.put("HUE_RED", BitmapDescriptorFactory.HUE_RED);
COLORS.put("HUE_ROSE", BitmapDescriptorFactory.HUE_ROSE);
COLORS.put("HUE_VIOLET", BitmapDescriptorFactory.HUE_VIOLET);
COLORS.put("HUE_YELLOW", BitmapDescriptorFactory.HUE_YELLOW);
}
private Marker marker; private Marker marker;
private LatLng position; private LatLng position;
private String title = ""; private String title = "";
...@@ -28,7 +47,7 @@ public class AMapMarker extends ReactViewGroup { ...@@ -28,7 +47,7 @@ public class AMapMarker extends ReactViewGroup {
private boolean flat = false; private boolean flat = false;
private float opacity = 1; private float opacity = 1;
private boolean draggable = false; private boolean draggable = false;
private BitmapDescriptor iconBitmapDescriptor; private BitmapDescriptor bitmapDescriptor;
private DataSubscriber<CloseableReference<CloseableImage>> dataSubscriber = private DataSubscriber<CloseableReference<CloseableImage>> dataSubscriber =
new BaseDataSubscriber<CloseableReference<CloseableImage>>() { new BaseDataSubscriber<CloseableReference<CloseableImage>>() {
@Override @Override
...@@ -36,10 +55,10 @@ public class AMapMarker extends ReactViewGroup { ...@@ -36,10 +55,10 @@ public class AMapMarker extends ReactViewGroup {
CloseableReference<CloseableImage> ref = dataSource.getResult(); CloseableReference<CloseableImage> ref = dataSource.getResult();
if (ref != null) { if (ref != null) {
try { try {
iconBitmapDescriptor = BitmapDescriptorFactory.fromBitmap( bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(
((CloseableStaticBitmap) ref.get()).getUnderlyingBitmap()); ((CloseableStaticBitmap) ref.get()).getUnderlyingBitmap());
if (marker != null) { if (marker != null) {
marker.setIcon(iconBitmapDescriptor); marker.setIcon(bitmapDescriptor);
} }
} finally { } finally {
CloseableReference.closeSafely(ref); CloseableReference.closeSafely(ref);
...@@ -63,7 +82,7 @@ public class AMapMarker extends ReactViewGroup { ...@@ -63,7 +82,7 @@ public class AMapMarker extends ReactViewGroup {
private MarkerOptions getMarkerOptions() { private MarkerOptions getMarkerOptions() {
return new MarkerOptions() return new MarkerOptions()
.setFlat(flat) .setFlat(flat)
.icon(iconBitmapDescriptor) .icon(bitmapDescriptor)
.alpha(opacity) .alpha(opacity)
.draggable(draggable) .draggable(draggable)
.position(position) .position(position)
...@@ -113,9 +132,16 @@ public class AMapMarker extends ReactViewGroup { ...@@ -113,9 +132,16 @@ public class AMapMarker extends ReactViewGroup {
} }
} }
public void setImage(String uri) { public void setImage(String image) {
if (image.startsWith("HUE_")) {
bitmapDescriptor = BitmapDescriptorFactory.defaultMarker(COLORS.get(image));
if (marker != null) {
marker.setIcon(bitmapDescriptor);
}
} else {
DataSource<CloseableReference<CloseableImage>> dataSource = Fresco DataSource<CloseableReference<CloseableImage>> dataSource = Fresco
.getImagePipeline().fetchDecodedImage(ImageRequest.fromUri(uri), this); .getImagePipeline().fetchDecodedImage(ImageRequest.fromUri(image), this);
dataSource.subscribe(dataSubscriber, CallerThreadExecutor.getInstance()); dataSource.subscribe(dataSubscriber, CallerThreadExecutor.getInstance());
} }
}
} }
...@@ -25,6 +25,7 @@ class Marker extends Component { ...@@ -25,6 +25,7 @@ class Marker extends Component {
/** /**
* 自定义图片 * 自定义图片
* 可以是 uri 或者 require 引用的资源图片
*/ */
image: PropTypes.oneOfType([ image: PropTypes.oneOfType([
PropTypes.number, PropTypes.number,
...@@ -54,8 +55,11 @@ class Marker extends Component { ...@@ -54,8 +55,11 @@ class Marker extends Component {
render() { render() {
if (this.props.image) { if (this.props.image) {
const source = resolveAssetSource(this.props.image) let image = this.props.image
return <AMapMarker {...this.props} image={source.uri}/> if (typeof this.props.image === 'number') {
image = resolveAssetSource(this.props.image).uri
}
return <AMapMarker {...this.props} image={image}/>
} else { } else {
return <AMapMarker {...this.props}/> return <AMapMarker {...this.props}/>
} }
......
...@@ -13,6 +13,10 @@ export default class MarkerComponent extends Component { ...@@ -13,6 +13,10 @@ export default class MarkerComponent extends Component {
latitude: 39.806901, latitude: 39.806901,
longitude: 116.397972, longitude: 116.397972,
}}/> }}/>
<Marker image='HUE_RED' title='其他颜色' coordinate={{
latitude: 39.806901,
longitude: 116.297972,
}}/>
<Marker image={require('../images/marker.png')} title='自定义图标' coordinate={{ <Marker image={require('../images/marker.png')} title='自定义图标' coordinate={{
latitude: 39.906901, latitude: 39.906901,
longitude: 116.397972, longitude: 116.397972,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment