From 31b0b234d7d82d4a5038319ac22c07eef21fdc02 Mon Sep 17 00:00:00 2001 From: Kurisu Date: Mon, 17 Oct 2022 09:13:06 +0800 Subject: [PATCH] 新增线段覆盖物自定义纹理 --- lib/android/src/main/java/cn/feewee/amap3d/map_view/Polyline.kt | 13 +++++++++++++ lib/android/src/main/java/cn/feewee/amap3d/map_view/PolylineManager.kt | 88 +++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------- lib/src/polyline.tsx | 12 ++++++++---- 3 files changed, 68 insertions(+), 45 deletions(-) diff --git a/lib/android/src/main/java/cn/feewee/amap3d/map_view/Polyline.kt b/lib/android/src/main/java/cn/feewee/amap3d/map_view/Polyline.kt index c5e60da..6fb872b 100644 --- a/lib/android/src/main/java/cn/feewee/amap3d/map_view/Polyline.kt +++ b/lib/android/src/main/java/cn/feewee/amap3d/map_view/Polyline.kt @@ -2,10 +2,15 @@ package cn.feewee.amap3d.map_view import android.content.Context import android.graphics.Color +import android.os.Handler +import android.os.Looper +import cn.feewee.amap3d.fetchImage import com.amap.api.maps.AMap +import com.amap.api.maps.model.BitmapDescriptor 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.ReadableMap import com.facebook.react.views.view.ReactViewGroup class Polyline(context: Context) : ReactViewGroup(context), Overlay { @@ -49,10 +54,18 @@ class Polyline(context: Context) : ReactViewGroup(context), Overlay { polyline?.isDottedLine = value } + var line: BitmapDescriptor? = null + fun setLine(source: ReadableMap) { + fetchImage(source) { + line = it + } + } + override fun add(map: AMap) { polyline = map.addPolyline( PolylineOptions() .addAll(points) + .setCustomTexture(line) .color(color) .colorValues(colors) .width(width) diff --git a/lib/android/src/main/java/cn/feewee/amap3d/map_view/PolylineManager.kt b/lib/android/src/main/java/cn/feewee/amap3d/map_view/PolylineManager.kt index 5c04614..4b3b044 100644 --- a/lib/android/src/main/java/cn/feewee/amap3d/map_view/PolylineManager.kt +++ b/lib/android/src/main/java/cn/feewee/amap3d/map_view/PolylineManager.kt @@ -7,58 +7,64 @@ import com.facebook.react.uimanager.annotations.ReactProp import cn.feewee.amap3d.getEventTypeConstants import cn.feewee.amap3d.toLatLngList import cn.feewee.amap3d.toPx +import com.facebook.react.bridge.ReadableMap @Suppress("unused") internal class PolylineManager : SimpleViewManager() { - override fun getName(): String { - return "AMapPolyline" - } + override fun getName(): String { + return "AMapPolyline" + } - override fun createViewInstance(context: ThemedReactContext): Polyline { - return Polyline(context) - } + override fun createViewInstance(context: ThemedReactContext): Polyline { + return Polyline(context) + } - override fun getExportedCustomBubblingEventTypeConstants(): Map { - return getEventTypeConstants("onPress") - } + override fun getExportedCustomBubblingEventTypeConstants(): Map { + return getEventTypeConstants("onPress") + } - @ReactProp(name = "points") - fun setPoints(polyline: Polyline, points: ReadableArray) { - polyline.points = points.toLatLngList() - } + @ReactProp(name = "points") + fun setPoints(polyline: Polyline, points: ReadableArray) { + polyline.points = points.toLatLngList() + } - @ReactProp(name = "colors") - fun setColors(polyline: Polyline, colors: ReadableArray) { - polyline.colors = (0 until colors.size()).map { colors.getInt(it) } - } + @ReactProp(name = "colors") + fun setColors(polyline: Polyline, colors: ReadableArray) { + polyline.colors = (0 until colors.size()).map { colors.getInt(it) } + } - @ReactProp(name = "color", customType = "Color") - fun setColor(polyline: Polyline, color: Int) { - polyline.color = color - } + @ReactProp(name = "color", customType = "Color") + fun setColor(polyline: Polyline, color: Int) { + polyline.color = color + } - @ReactProp(name = "width") - fun setWidth(polyline: Polyline, width: Float) { - polyline.width = width.toPx().toFloat() - } + @ReactProp(name = "width") + fun setWidth(polyline: Polyline, width: Float) { + polyline.width = width.toPx().toFloat() + } - @ReactProp(name = "zIndex") - fun setIndex(polyline: Polyline, zIndex: Float) { - polyline.zIndex = zIndex - } + @ReactProp(name = "zIndex") + fun setIndex(polyline: Polyline, zIndex: Float) { + polyline.zIndex = zIndex + } - @ReactProp(name = "geodesic") - fun setGeodesic(polyline: Polyline, geodesic: Boolean) { - polyline.geodesic = geodesic - } + @ReactProp(name = "geodesic") + fun setGeodesic(polyline: Polyline, geodesic: Boolean) { + polyline.geodesic = geodesic + } - @ReactProp(name = "dashed") - fun setDashed(polyline: Polyline, dashed: Boolean) { - polyline.dashed = dashed - } + @ReactProp(name = "dashed") + fun setDashed(polyline: Polyline, dashed: Boolean) { + polyline.dashed = dashed + } - @ReactProp(name = "gradient") - fun setGradient(polyline: Polyline, gradient: Boolean) { - polyline.gradient = gradient - } + @ReactProp(name = "gradient") + fun setGradient(polyline: Polyline, gradient: Boolean) { + polyline.gradient = gradient + } + + @ReactProp(name = "line") + fun setLine(view: Polyline, line: ReadableMap?) { + line?.let { view.setLine(it) } + } } diff --git a/lib/src/polyline.tsx b/lib/src/polyline.tsx index d414693..6550ef0 100644 --- a/lib/src/polyline.tsx +++ b/lib/src/polyline.tsx @@ -1,5 +1,7 @@ import * as React from "react"; -import { ColorValue, Platform, processColor, requireNativeComponent } from "react-native"; +import { ColorValue, ImageSourcePropType, Platform, processColor, requireNativeComponent } from "react-native"; +// @ts-ignore +import resolveAssetSource from "react-native/Libraries/Image/resolveAssetSource"; import { LatLng } from "./types"; export interface PolylineProps { @@ -12,12 +14,14 @@ export interface PolylineProps { * 线段宽度 */ width?: number; - + /** + * 线段的纹理 + */ + line?: ImageSourcePropType; /** * 线段颜色 */ color?: ColorValue; - /** * 层级 */ @@ -58,7 +62,7 @@ export default class extends React.PureComponent { ...Platform.select({ android: { colors: this.props.colors.map(processColor) } }), }; // @ts-ignore - return ; + return ; } } -- libgit2 0.22.2